2009-07-05 5 views
1

Es gibt eine Möglichkeit, Aktion in zu übergeben. Ich möchte ein einfaches Popup mit "Ja" und "Nein" -Schaltfläche schreiben, und ich möchte dieses Popup auf verschiedenen Seiten wiederverwenden, deshalb brauche ich, dass eine andere Aktion aufgerufen wurde, wenn die "Ja" -Taste gedrückt wurde. Es gibt einen Weg, um etwas Wert in <rich:modalPanel> mit <a4j:actionparam> weitergeben müssen:Übergeben Aktion in <Rich: ModalPanel>

<a4j:commandButton value="See details…" id="det" 
    reRender="popup_dataIdField, …"> 

    <rich:componentControl for="popup" 
     operation="show" event="onclick" /> 

    <a4j:actionparam name="message" assignTo="#{popupBean.message}" 
     value="#{myBean.message}" />           
</a4j:commandButton> 

Aber ist eine Möglichkeit, Maßnahmen zu übergeben?

Antwort

1

Ich finde die Antwort von mir :). Vielleicht wird es für jemanden hilfreich sein.

Ich habe dies mit Facelets getan. Wenn ich Pop-up auf meiner Seite sind gebe ich parametr es:

  <ui:include src="./WEB-INF/popup/popup.xhtml"> 
       <ui:param name="yesAction" value="${thisPageBean}" /> 
      </ui:include> 

Wo thisPageBean - ist Bohne aus welchem ​​Popup aufgerufen.

Da ist in meinem Popup schrieb ich:

<a4j:commandButton id="yesButton" value="#{msgs.yesButton}" 
        action="#{yesAction.someAtion}" 
</a4j:commandButton> 

Und damit ich rufe thisPageBean.someAtion. Alle Magie ist ${thisPageBean}, es ist für uns notwendig $, aber keine #.

0

Ja, ich sehe keine Probleme damit. Sie können meinen Code, wenn Sie verwenden:

<rich:modalPanel id="popup" width="261" height="386" autosized="true"left="180" top="200" keepVisualState="true"> 
    <h:panelGrid id="panelGrid"> 
     <h:outputText value="#{PopupBean.output}" id="popupMessage"/> 
      <a4j:commandLink action="#"> 
       <h:outputText value="Close" /> 
       <rich:componentControl for="popup" operation="hide" event="onclick"/> 
      </a4j:commandLink> 
    </h:panelGrid> 
</rich:modalPanel> 
<h:panelGrid columns="2"> 
    <a4j:commandLink action="#" reRender="panelGrid"> 
     <h:outputText value="Yes" /> 
     <rich:componentControl for="popup" operation="show" event="onclick"/> 
     <a4j:actionparam name="message" assignTo="#{PopupBean.output}" value="#{TestBean.input1}"/> 
    </a4j:commandLink> 
    <a4j:commandLink action="#" reRender="panelGrid"> 
     <h:outputText value="No" /> 
     <rich:componentControl for="popup" operation="show" event="onclick"/> 
     <a4j:actionparam name="message2" assignTo="#{PopupBean.output}" value="#{TestBean.input2}"/> 
    </a4j:commandLink> 
</h:panelGrid> 

Basicly der Ausgang des Modal-Panel die Werte in der TestBean

bearbeiten enthalten wird (das Mißverständnis):

Ich glaube, man will haben Ihre modal Feld wie folgt zu definieren:

<rich:modalPanel id="popup" width="261" height="386" autosized="true"left="180" top="200" keepVisualState="true" 
    binding="#{PopupBean.popupPanel}"> 
</rich:modalPanel> 

Und in Ihrer verwalteten Bohne Sie addChildren zu Ihrem modalen haben Panel dynamisch mit Java wie folgt:

public String action_PoppingThePanel() { 
    HtmlCommandButton button = new HtmlCommandButton(); 
    button.setValue("Yes"); 
    String action = "#{TestBean.action_yes}"; 
    MethodExpression methodExpression = 
      FacesContext.getCurrentInstance().getApplication().getExpressionFactory(). 
      createMethodExpression(FacesContext.getCurrentInstance().getELContext(), action, null, 
      new Class<?>[0]); 

    button.setActionExpression(methodExpression); 
    getPopupPanel().getChildren().add(button); 
    button = new HtmlCommandButton(); 
    button.setValue("No"); 
    String action = "#{TestBean.action_no}"; 
    methodExpression = 
      FacesContext.getCurrentInstance().getApplication().getExpressionFactory(). 
      createMethodExpression(FacesContext.getCurrentInstance().getELContext(), action, null, 
      new Class<?>[0]); 

    button.setActionExpression(methodExpression); 
    getPopupPanel().getChildren().add(button);   
    getPopupPanel().setRendered(true); 
    getPopupPanel().setShowWhenRendered(true); 
    return null; 
} 
+0

Sie übergeben eine einfache Zeichenfolge oder einen anderen Wert an ModalPanel, aber ich möchte eine Aktion übergeben. Ich möchte auf einer Seite, wenn ich auf "OK" -Button im Popup eine Methode war Complite, in anderen Seite andere Methode. Ich möchte diese Methode weiterleiten. Es wird mir helfen, dieses Popup wiederzuverwenden. – aindl

+0

Oh Es tut mir leid, ich habe deine Frage missverstanden. Ich werde das für Sie prüfen –

+0

Vielen Dank für schnelle Antwort, aber ich finde einfache Lösung :). Siehe oben. – aindl

3

Wie Sie Facelets verwenden, dann schauen Sie sich Rick Hightower's article und den Abschnitt "Passing Aktionen". Es ist die gleiche grundlegende Methode, die Sie verwendet haben, aber auch die Methode für die Bean übergeben.

ZB:

<ui:include src="./WEB-INF/popup/popup.xhtml"> 
    <ui:param name="yesAction" value="save"/> 
    <ui:param name="cancelAction" value="cancel"/> 
    <ui:param name="backingBean" value="#{thisPageBean}"/> 
</ui:include> 

Und dann im Popup:

<a4j:commandButton id="yesButton" value="#{msgs.yesButton}" 
    action="#{backingBean[yesAction]}"/> 

Beachten Sie, dass die # verwenden.

+0

Sind es nicht Bohnen? Wie kann ich sowohl Bean als auch Action weitergeben? – nikagra

+0

versuche es erstmal eh. Die eckigen Klammern ermöglichen die Aktion. – Damo