2009-07-10 7 views
6

Ich hoffe, jemand kann mir mit einer kleinen Hürde helfen, die ich beim Rendern von RichFaces-Komponenten habe, nachdem ein a4j-Link/eine Schaltfläche ausgeführt wurde . Eine vereinfachte Version meines Problems ist wie folgt:Wie man eine RichFaces-Komponente nach dem Aufrufen eines a4j-Links erneut rendert

Ich habe 2 Ausgabekomponenten einen Textwert anzeigt, die auf einen Wert in meinem Manager Klasse gemacht basieren:

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

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

Ich habe auch 2 a4j Links, rufen eine Aktion und dann die oben output Komponenten neu rendern:

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

Was würde ich erwarten, wird zu passieren, wenn ich die Taste ‚On Set‘ klicken, wird die ‚ON‘ output Komponente sichtbar machen würde und die ‚OFF outputText-Komponente würde angezeigt. Dies geschieht jedoch nicht.

Hat jemand die Antwort, warum das so ist, und wie gehe ich über das erneute Rendern dieser Komponenten nach Abschluss der a4j-Komponente Aktion?

Antwort

11

Wickeln Sie die outputText Komponenten in einem s:div und dass wieder machen, wie folgt:

<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

Ich nehme an, dass Ihr h: output Elemente auf und off sind nicht zur Ladezeit gerendert von Die Seite.

Richfaces nicht diese Komponenten später auch wenn der Wert von gemacht geändert wahr rerender.

1

Sie rerender die Eltern. Es muss kein Seam-Tag sein.

3

ich mit Genen zustimmen, aber der beste Weg, den ich finden konnte ist, den Inhalt mit

<a4j:outputpanel id="whatever_id" />

beispielsweise zu umgeben,

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