Question

J'ai une page JSF sur laquelle je veux avoir une case à cocher, lorsque vous cliquez dessus ajouter / supprimer certains autres champs de formulaire de la page. Voici le code (simplifié) Je actuellement la case à cocher:

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

Voici le code pour le composant que je veux cacher:

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

À l'heure actuelle, en cliquant la case à cocher ne fait rien; que « selectOneMenu » ne va pas disparaître. Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Vous avez besoin d'envelopper le componentToReRender soit:

<h:panelGroup id="componentToReRenderWrapper">

ou

<a4j:outputPanel id="componentToReRenderWrapper">

Ainsi, vous aurez effectivement:

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

et changer le reRender="componentToReRenderWrapper" au cas où vous utilisez panelGroup ou de supprimer cet attribut, dans le cas où vous utilisez outputPanel.

Nous avons trouvé l'explication exacte dans le RichFaces docs:

  

Le problème le plus commun avec l'aide rerender pointe au composant qui a un attribut « rendu ». Notez que JSF ne marque pas le lieu dans le navigateur DOM où le résultat du composant doit être placé dans le cas où le « rendu » condition retourne false. Par conséquent, après que le composant devient rendu lors de la demande Ajax, RichFaces délivre le code rendu au client, mais ne met pas à jour une page, car le lieu de mise à jour est inconnue. Vous devez pointer vers l'un des composants parent qui n'a pas d'attribut « rendu ». Comme alternative, vous pouvez envelopper le composant avec la mise en page = « none ».

Autres conseils

Ne pas oublier de mettre ajaxRendered = "true" sur le a4j: outputPanel

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top