2009-07-10 4 views
6

Sperare che qualcuno possa aiutarmi con un leggero ostacolo per quanto riguarda il re-rendering dei componenti RichFaces dopo che un pulsante/pulsante a4j ha eseguito la sua azione . Una versione semplificata del mio problema è il seguente:Come eseguire il rendering di un componente RichFaces dopo il collegamento a4j viene invocato

Ho 2 componenti di output che mostrano un valore di testo che vengono rese sulla base di alcuni valori nella mia classe dirigente:

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

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

ho anche collegamenti 2 a4j che chiamano qualche azione e poi ri-renderizzare le componenti outputText di cui sopra:

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

Cosa mi aspetto che accada è, quando scatto 'Set On' pulsante, componente del 'ON' outputText sarebbe unhide, e il 'OFF il componente outputText mostrerebbe. Tuttavia, questo non succede.

Qualcuno ha la risposta sul motivo per cui è così, e come vado a rivedere questi componenti dopo che l'azione del componente a4j è stata completata?

risposta

11

Avvolgere i outputText componenti di un s:div e ri-renderizzare che come segue:

<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

Suppongo che il vostro h: outputText elementi su e fuori non sono fusi a tempo di caricamento di la pagina.

RichFaces non rerender questi componenti in seguito, anche se il valore di reso cambiato in vero.

1

Riavvia il genitore. Non deve essere un tag Seam.

3

Sono d'accordo con Gene, ma il modo migliore che ho trovato è quello di circondare il contenuto con

<a4j:outputpanel id="whatever_id" />

per esempio,

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