2010-09-20 8 views
4

EDIT
Cant semblent se rendered pour fonctionner correctement avec update attributs. Voici mes codesJSF + Primefaces: un problème "rendus" composants avec ajax

 <ui:define name="left"> 
      <h:form> 
       <p:commandLink value="Hey" 
       actionListener="#{bean.setRenderComment}" 
       update="comment"/> 
      </h:form> 
     </ui:define> 
     <ui:define name="right"> 
      <h:panelGroup id="comment" rendered="#{bean.renderComment}"> 
       hello 
      </h:panelGroup> 
     </ui:define> 

renderComment est un des attributs booléens à l'intérieur bean. setRenderComment essentiellement basculer l'état de renderComment comme celui-ci

this.renderComment = !this.renderComment; 

droit, chaque fois que je clique sur le lien Hey, je dois rafraîchir soit rendre hello ou désactiver. Comment puis-je résoudre ce problème, de sorte que je ne avoir besoin de rafraîchir

Répondre

13

Je n'utilise pas Primefaces mais RichFaces sur mes projets. Donc, je ne suis pas vraiment au courant de la façon dont le processus d'actualisation est effectué par Primefaces. Cependant, j'ai une idée qui peut être testée facilement.

Votre problème peut être dû au fait que le composant à nouveau rendu (à savoir mise à jour) ne se trouve pas sur la page HTML. Si votre attribut rendered est égal à false, l'ID <SPAN> avec l'ID comment est et non intégré dans la page HTML générée. Ainsi, lorsque la requête Ajax est reçue côté client, le moteur Ajax n'est pas en mesure d'actualiser ce <SPAN> car il n'est pas trouvé.

Donc ce que vous pouvez faire est de rendre toujours votre panelGroup et déplacez votre attribut rendered à un <h:outputText> imbriqué qui contient le message Bonjour.

Voici ce que je propose:

<h:panelGroup id="comment"> 
    <h:outputText value="Hello" rendered="#{bean.renderComment}"/> 
</h:panelGroup> 

De cette façon, le panelGroup sera toujours rafraîchi après l'appel Ajax, et il contiendra le Bonjour un message ou non, en ce qui concerne la valeur de la renderComment attribut de votre haricot.

+0

Merci. Ça marche :). La raison pour laquelle j'utilise 'panelGroup' est parce que, j'ai beaucoup de composants que je veux rendre ou désactiver en utilisant un seul attribut' rendered'. Si je dois le faire, je suppose que je pourrais tout aussi bien enlever le 'panelGroup'. Merci beaucoup l'homme: D –

1

Depuis le composant avec l'ID comment est pas un des enfants de la forme (un composant UINamingContainer), vous devez préfixer l'ID avec : pour instruire JSF scan depuis le "niveau supérieur".

Cela devrait faire:

<p:commandLink value="Hey" 
    actionListener="#{bean.setRenderComment}" 
    update=":comment" /> 
+0

Ohh wow. Je ne savais pas que 'update' ne fonctionne que sur le même niveau. Et si j'ai plusieurs niveaux. J'essaie ':: comment', mais ça ne marche pas. Pouvez-vous jeter un coup d'oeil à mon post mis à jour, s'il vous plaît? –

+0

@Harry: romaintaz l'a cloué au sol. – BalusC