Frage

Ich habe eine JSF-Seite, auf der ich eine Checkbox haben wollen, die, wenn sie angeklickt, wird hinzufügen / entfernen bestimmte andere Formularfelder von der Seite. Hier ist der (vereinfachte) Code, den ich zur Zeit für die Checkbox habe:

<h:selectBooleanCheckbox title="showComponentToReRender" value="#{backingBean.showComponentToReRender}">
    <a4j:support event="onsubmit" reRender="componentToReRender" />
</h:selectBooleanCheckbox>

Hier ist der Code für die Komponente I zu verbergen wollen:

<h:selectOneMenu id="componentToReRender" value="#{backingBean.value}" rendered="#{valuesList.rowCount>1 &amp;&amp; backingBean.showComponentToReRender}">
   <s:selectItems value="#{valuesList}" var="value"/>
</h:selectOneMenu>

Zur Zeit das Kontrollkästchen klicken tut nichts; dass „selectOneMenu“ wird nicht weggehen. Was mache ich falsch?

War es hilfreich?

Lösung

Sie müssen die componentToReRender in beiden einzuwickeln:

<h:panelGroup id="componentToReRenderWrapper">

oder

<a4j:outputPanel id="componentToReRenderWrapper">

Also, effektiv haben Sie:

<h:panelGroup id="componentToReRenderWrapper">
    <h:selectOneMenu id="componentToReRender" value="#{backingBean.value}" rendered="#{valuesList.rowCount>1 &amp;&amp; backingBean.showComponentToReRender}">
       <s:selectItems value="#{valuesList}" var="value"/>
    </h:selectOneMenu>
</h:panelGroup>

und ändern Sie die reRender="componentToReRenderWrapper" falls Sie verwenden panelGroup, oder entfernen Sie das Attribut, falls Sie outputPanel verwenden.

Gefunden die genaue Erklärung in der Richfaces docs:

  

Die meisten verbreitetes Problem bei rerender Verwendung verweist es auf die Komponente, die ein „gerendert“ -Attribut hat. Beachten Sie, dass JSF nicht den Platz im Browser DOM nicht markieren, wo das Ergebnis der Komponente sollte die „gerendert“ Bedingung false zurück, falls platziert werden. Daher wird, nachdem die Komponente während der Ajax-Anfrage gemacht wird, liefert den gerenderte Richfaces-Code an den Client, aber nicht über eine Seite aktualisieren, da der Platz für die Aktualisierung nicht bekannt ist. Sie müssen eine der übergeordneten Komponenten zu Punkt, dass kein „gerendert“ -Attribut hat. Als Alternative können Sie die Komponente mit layout = „none“ wickeln.

Andere Tipps

Vergessen Sie nicht ajaxRendered = "true" auf der a4j einzustellen: output

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top