Frage Wie man eine RichFaces-Komponente neu rendert, nachdem eine a4j-Verknüpfung aufgerufen wurde


Hoffentlich hilft mir jemand mit einer kleinen Hürde, die ich in Bezug auf das Rendern von RichFaces-Komponenten habe, nachdem ein a4j Link / Button seine Aktion ausgeführt hat. Eine vereinfachte Version meines Problems ist wie folgt:

Ich habe 2 Ausgabekomponenten, die einen Textwert anzeigen, der basierend auf einem Wert in meiner Manager-Klasse gerendert wird:

<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, die eine Aktion aufrufen und dann die obigen outputText-Komponenten erneut 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 ich erwarten würde ist, wenn ich auf die Schaltfläche 'Set On' klicke, würde die 'on' outputText Komponente eingeblendet und die 'out outputText Komponente würde erscheinen. Dies geschieht jedoch nicht.

Hat jemand die Antwort, warum dies so ist, und wie ich diese Komponenten nach dem Abschluss der a4j-Komponentenaktion erneut rendere?


6
2017-07-10 06:09


Ursprung


Antworten:


Wickeln Sie die outputText Komponenten in einem s:div und render das 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" />

11
2017-07-10 06:56



Ich stimme Gene zu, aber der beste Weg, den ich finden könnte, ist, den Inhalt mit zu umgeben

<a4j:outputpanel id="whatever_id" /> 

beispielsweise,

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

3
2017-10-02 16:40



Sie geben das Elternelement erneut aus. Es muss kein Seam-Tag sein.


1
2017-09-21 10:37



Ich nehme an, dass dein h: ausgabeText Elemente auf und aus werden nicht zur Ladezeit der Seite gerendert.

RichFaces wird diese Komponenten später nicht erneut rendern, auch wenn der Wert von gerendert gewechselt zu wahr.


0
2017-07-23 09:34