Announcement

Collapse
No announcement yet.

jsf popup window

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • jsf popup window

    Hallo,

    schon seit 2 Tagen versuche ich in meinem Projekt ein PopUp-Window zu implementieren und immer noch erfolglos.
    Problembeschreibung: Ich habe ein CommandButton
    Code:
    <h:commandButton id="id" actionListener="#{bean.methode}" />
    Ich benutze "onclick" nicht, weil für mein PopUp die Daten zuerst aus Session geholt werden müssen! Ok, mache ich das!
    Code:
    public void methode(ActionEvent event)
    {
    //holle mir die Daten aus Session ....
    
    
    UND JETZT SOLL POPUP-WINDOW GEOFFNET WERDEN!!!!
    }
    Ich habe folgendes gemacht:

    Code:
    public void methode(ActionEvent event)
    {
    //holle mir die Daten aus Session ....
    
    final String link = "/ziel/popup/popup.xhtml";
    FacesContext facesContext = FacesContext.getCurrentInstance();
    ViewHandler viewHandler = facesContext.getApplication().getViewHandler();
    
    String actionUrl = viewHandler.getActionURL(facesContext,link);
    
    String javaScriptText = "window.open('"+actionUrl+"', 'popupWindow',    'dependent=yes, menubar=yes, toolbar=yes, height=200, width=200');";
    
    AddResource addResource = AddResourceFactory.getInstance(facesContext);
    addResource.addInlineScriptAtPosition(facesContext,AddResource.HEADER_BEGIN, javaScriptText);
    }
    Was mir an dieser Lösung nicht gefällt!
    Dass, nach dem ersten Klicken

    HTML Code:
    <script type="text/javascript"><!--
    window.open('/ziel/popup/popup.xhtml', 'popupWindow', 'dependent=yes, menubar=yes, toolbar=yes, height=200, width=200');
    //--></script>
    Javascript im Header steht und wird immer beim neuen Laden der Seite ausgeführt und damit offnet sich popup-Window wieder.

    Wie kann man mein Problem anderes lösen oder wie würden Sie es lösen. Es muss irgendwie einfach sein und mir fehlen leider die Kenntnisse, dieses Problem jetzt sauber zu lösen.
    Danke!

  • #2
    Das kannt mit JSF nicht gelöst werden. JSF läuft auf dem Server nicht auf dem Client.

    Schreibe dein Javascript mit einem Funktionsnamen in den Header, dann wird es nicht beim laden der Seite aufgerufen. Rufe dann die Funktion im OnClick des CommandButton auf
    Christian

    Comment


    • #3
      Danke für schnelle Antwort!
      Das habe ich auch schon probiert!

      Code:
      function popUp()
      {
          intWidth=788;
          intHeight=516;
          link='/ziel/popup/popup.xhtml';
          intHeight = intHeight - 20;var x=0, y=0, parameter="";
          //if (intWidth < screen.availWidth || intHeight < screen.availHeight)
          //{}
          
          x = (screen.availWidth - intWidth - 12) / 2;
          y = (screen.availHeight - intHeight - 104) / 2;
      
          if (window.opera)
          {// Opera positioniert unter den Symbolleisten
              y = 0; 
          }
      
          if (x<0 || y<0)
          {
              x=0;
              y=0;
          }
          else
          {
              parameter = "width=" + intWidth + ",height=" + intHeight + ",";
          }
      
          parameter += "left=" + x + ",top=" + y;
          parameter += ",menubar=no,location=yes,toolbar=no,status=no";
          parameter += ",resizable=yes,scrollbars=yes";
      
          var popup = window.open(link,"PopUp",parameter);
      
          if (popup)
          {
              popup.focus();
          }
      
          return !popup;
      }
      HTML Code:
      <h:commandButton id="id" onclick="return popup();" />
      Das Problem ist dabei, dass bestimmte Daten für Popup benötigt werden, die erst aus Session geholt werden müssen. Und aus Javascript (läuft auf Client) kann ich auf diese Daten nicht zugreifen.
      Es muss irgendwie gehen, diese Popups sind doch überall!

      Comment


      • #4
        Versuche

        <page action="#{controller.intiDaten()}" view-id="/dein_popup*">
        </page>

        in die Pages zu setzen. Dann wird bei einem Request der auf die view-id matcht die Action aufgerufen
        Christian

        Comment


        • #5
          Noch einmal Vielen Dank für deine Hilfe!

          Nach deinem Tipp habe ich folgendes gerade gemacht!
          Statt pages.xml habe ich faces-config.xml. Da habe ich folgendes eingetragen...

          Code:
          <navigation-rule>
                  <from-view-id>/index.xhtml</from-view-id>
                  <navigation-case>
                      <from-action>#{bean.toPopup}</from-action>
                      <to-view-id>/ziel/popup/popup.xhtml</to-view-id>
                  </navigation-case>
          </navigation-rule>
          Dann in index.xhtml folgendes ...
          HTML Code:
          <h:commandButton id="id" actionListener="#{been.methode}" action="#{bean.toPopup}"
          </h:commandButton>
          Es geht alles wie geplannt , aber es ist kein popUp-Fenster mehr, sondern ganz normales Weiterleiten zu anderer Seite.
          Kann man vielleicht die Größe und Position von neuen Fenster definieren oder es ist immer Browser-Größe?
          Und kann man vielleicht neue Seite als neues Fenster offnen?
          Zuletzt editiert von curiosity; 19.05.2011, 12:21.

          Comment

          Working...
          X