2012-06-07 1 views
1

J'ai un <h:dataTable> avec un <h:commandLink> dans une colonne et un <h:outputext> en dehors du <h:dataTable> que j'ai besoin de rendre par le lien de commande.Comment faire pour rendre un composant hors datatable par ajax?

<h:form> 
     <h:dataTable value="#{userControl.lista}" var="c"> 

      <h:column> 
       <f:facet name="header" > 
        <h:outputText styleClass="leftColumn" value="Nombre"/> 
       </f:facet> 
        #{c.nombre} 
      </h:column> 

      <h:column> 
       <f:facet name="header" > 
        Usuario 
       </f:facet> 
       <h:commandLink actionListener="#{userControl.setAdmin_user(c.user)}" value="#{c.user}"> 
        <f:ajax render="output" /> 
       </h:commandLink>     
      </h:column>  

     </h:dataTable> 


     <h:outputText id="output" value="#{userControl.admin_user}"/> 
</h:form> 

Cela ne fonctionne pas. Si je déplace le <h:outputText> dans la même colonne, alors cela fonctionne.

Comment cela est-il causé et comment puis-je le résoudre?

Répondre

4

L'ID client que vous avez actuellement dans le <f:ajax render> ne commence pas par le caractère de séparation par défaut NamingContainer: et est donc par rapport à la composante de courant NamingContainer, ce qui est dans votre cas, le <h:dataTable>. Donc, cela ne fonctionnera que lorsque le composant de texte en sortie est également dans la même donnée.

Vous devez renvoyer le composant de texte en sortie par un ID de client absolu à la place. Pour les débutants qui n'ont pas encore mémorisé tous les composants NamingContainer, le moyen le plus simple de le découvrir consiste à vérifier l'attribut id de l'élément HTML généré dans le navigateur Web. Ouvrez la page dans webbrowser et faire Afficher la source et de localiser l'élément <span> généré par <h:outputText id="output"> et prendre exactement cet ID et le préfixe avec : pour le rendre absolu à la racine de la vue.

E.g.

<span id="formId:output"> 

formId est l'ID de tout <h:form> pour le cas où le outputText est enfermé dans un <h:form>. Si vous n'avez pas spécifié d'ID fixe pour le <h:form>, JSF en génère automatiquement un. Vous souhaitez spécifier un ID fixe, puis <h:form id="formId">.

Ainsi, le <f:ajax render> devrait ressembler à ceci alors

<f:ajax render=":formId:output" /> 
+0

Merci BalusC, son travail pefertly. :) – Roberto

+0

De rien. – BalusC

Questions connexes