Question

Il y a une certaine façon de passer l'action en <rich:modalPanel>. Je veux écrire pop-up simple « Oui » et « Non » bouton, et je veux réutiliser ce pop-up dans différentes pages, c'est la raison pour laquelle j'ai besoin que l'action différent a été invoqué lorsque le bouton « Oui » enfoncée. Il y a une façon de transmettre une valeur à <rich:modalPanel> avec <a4j:actionparam>:

<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>

Mais est un moyen de passer l'action?

Était-ce utile?

La solution 2

Je trouve la réponse par moi-même :). Peut-être qu'il sera utile pour quelqu'un.

Je l'ai fait en utilisant Facelets. Quand je suis inclus pop-up sur ma page Je passe Parametr à lui:

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

thisPageBean -. Bean de ce pop-up appelé

Alors dans mon pop-up que j'ai écrit:

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

Et avec cela, j'invoque thisPageBean.someAtion. Toute magie est ${thisPageBean}, il est nécessaire pour nous $ mais pas #.

Autres conseils

Comme vous utilisez Facelets puis regardez article de Rick Hightower et la section "Passing Actions". Il est la même méthode de base pour ce que vous avez utilisé, mais aussi dans le passage méthode sur le haricot.

Par exemple:

<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>

Et puis dans le menu contextuel:

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

Notez que vous utilisez le #.

Oui, je ne vois aucun problème avec le faire. Vous pouvez utiliser mon code si vous voulez:

<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>

Fondamentalement, la sortie dans le panneau modal contiendra les valeurs dans le TestBean

Edit (malentendu) :

Je crois que vous devrez définir votre panneau modal comme ceci:

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

Et dans votre managed bean vous devrez addChildren à votre panneau modal dynamiquement avec java comme ceci:

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top