2009-07-10 4 views
6

En espérant que quelqu'un puisse m'aider avec un léger obstacle que j'ai rencontré en ce qui concerne le rendu des composants RichFaces après qu'un lien/bouton a4j ait effectué son action . Une version simplifiée de mon problème est le suivant:Comment faire un nouveau rendu d'un composant RichFaces après l'invocation du lien a4j

J'ai 2 composants de sortie affichant une valeur de texte qui sont rendus basé sur une valeur dans ma classe de gestionnaire:

<h:outputText id="on" value="ON" rendered="#{manager.isOn}" /> 

<h:outputText id="off" value="OFF" rendered="#{not manager.isOn}" /> 

J'ai aussi 2 liens a4j qui appellent une action, puis re-rendre les composants outputText ci-dessus:

<a4j:commandLink ajaxSingle="true" value="Set On" action="#{manager.setOn(true)}" reRender="on,off" /> 

<a4j:commandLink ajaxSingle="true" value="Set Off" action="#{manager.setOn(false)}" reRender="on,off" /> 

Ce que je vous attendre à arriver est, lorsque je clique sur le « Set sur » bouton, le composant outputText « oN » se démasquer, et le « OFF Le composant outputText s'affichera. Cependant, cela n'arrive pas.

Quelqu'un a-t-il la réponse à la question de savoir pourquoi, et comment je vais faire pour rendre ces composants une fois l'action du composant a4j terminée?

Répondre

11

Envelopper les outputText composants dans un s:div et réengendrer que comme suit:

<s:div id="myDiv"> 
    <h:outputText id="on" value="ON" rendered="#{manager.isOn}" /> 

    <h:outputText id="off" value="OFF" rendered="#{not manager.isOn}" /> 
</s:div> 

<a4j:commandLink ajaxSingle="true" value="Set On" 
    action="#{manager.setOn(true)}" reRender="myDiv" /> 

<a4j:commandLink ajaxSingle="true" value="Set Off" 
    action="#{manager.setOn(false)}" reRender="myDiv" /> 
0

Je suppose que votre h: outputText éléments sur et hors ne sont pas rendus au moment de la charge la page.

RichFaces ne rerender ces composants plus tard, même si la valeur de rendu changé vrai.

1

Vous faites de nouveau le parent. Il ne doit pas être un tag Seam.

3

Je suis d'accord avec Gene, mais la meilleure façon que je pourrais trouver est d'entourer le contenu avec

<a4j:outputpanel id="whatever_id" />

par exemple,

<a4j:outputpanel id="myDiv"> 
    <h:outputText id="on" value="ON" rendered="#{manager.isOn}" /> 
    <h:outputText id="off" value="OFF" rendered="#{not manager.isOn}" /> 
</a4j:outputpanel> 
Questions connexes