web-dev-qa-db-fra.com

JSF + PrimeFaces: l'attribut `update` ne met pas à jour le composant

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?

24
Thang Pham

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