Voici ma mise en page
<div id="mainPanel">
<div id="padding">
<h:outputText id="text" value="Personal Feed" rendered="#{Profile.renderComment}"/>
</div>
<div id="right">
<h:form>
<p:commandButton value="Update" actionListener="#{bean.toggleComment}" update="text" />
</h:form>
</div>
</div>
Lorsque je clique sur le lien Update
, qui est censé activer et désactiver le renderComment
booléen, il ne bascule pas l'affichage du texte Personal Feed
. Maintenant, si je mets un formulaire autour du h:outputText
et update
le form
à la place, alors ça marche. Pourquoi donc?
L'attribut update
doit pointer vers un ID client existant dans l'arborescence DOM HTML. Cependant, puisque l'élément n'est pas disponible dans l'arborescence DOM HTML car il n'est pas rendu par le côté serveur, JS/ajax ne trouve rien dans l'arborescence DOM HTML à mettre à jour.
En fait, vous devriez l'envelopper dans un autre élément qui est toujours disponible dans l'arborescence DOM HTML afin qu'Ajax puisse le localiser et ensuite utiliser son ID client dans update
. Dans votre cas, vous pouvez utiliser padding
pour cela.
<div id="mainPanel">
<h:panelGroup id="padding" layout="block">
<h:outputText id="text" value="Personal Feed" rendered="#{Profile.renderComment}"/>
</h:panelGroup>
<div id="right">
<h:form>
<p:commandButton value="Update" actionListener="#{bean.toggleComment}" update=":padding" />
</h:form>
</div>
</div>