JSTL c:si ne fonctionne pas à l'intérieur d'un JSF h:dataTable
Je suis en train d'utiliser <c:if>
conditionnelle, mettre un <h:outputLink>
à l'intérieur d'un <h:dataTable>
lorsque l'état est fini.
<h:dataTable value="#{bean.items}" var="item" width="80%">
<h:column>
<f:facet name="header">
<h:outputText value="State" />
</f:facet>
<c:if test="#{item.state != 'Finish'}">
<h:outputText value="Missing value" />
</c:if>
<c:if test="#{item.state == 'Finish'}">
<h:outputLink value="myLink">
<h:outputText value="Value = #{item.state}" />
</h:outputLink>
</c:if>
</h:column>
</h:dataTable>
Mais cela ne fonctionne pas, pourquoi est-ce et comment puis-je résoudre ce problème?
OriginalL'auteur ErVeY | 2010-08-09
Vous devez vous connecter pour publier un commentaire.
Balises JSTL sont évalués lors de la construction de la vue, et non lors du rendu de la vue. Vous pouvez le visualiser comme suit: Chaque fois qu'une vue de l'arbre créé pour la première fois, toutes les balises JSTL sont exécutés et le résultat est un point de vue uniquement avec des composants JSF. Chaque fois qu'une vue de l'arbre se rendait, tous les composants JSF exécuté et le résultat est HTML. Donc: JSF+JSTL ne pas fonctionner en synchronisation que vous vous attendez de la codification. JSTL fonctionne de haut en bas en premier, les mains le résultat de JSF et puis c'est la JSF tour à courir à partir du haut vers le bas de nouveau. Cela peut conduire à des résultats inattendus dans JSF itération des composants comme UIData car la ligne de données (dans votre cas particulier, la
#{item}
objet) est pas disponible pendant la JSTL s'exécute.En un mot: l'Utilisation de JSTL pour contrôler le flux de JSF composant de l'arbre de construction. L'utilisation de JSF pour contrôler le flux de sortie HTML génération.
Vous souhaitez utiliser le
rendered
attribut ici.Voir aussi:
OriginalL'auteur BalusC