2010-10-25 22 views
1

Pardonnez-moi pour le titre, c'est le meilleur que mon cerveau limité peut être arrivé si tard. Donc, j'ai une liste de chaînes, quelque chose comme [abc, def, ghi].JSF: logique basée sur l'indice d'itération

La question: dans JSF, comment itérer la liste et créer une chaîne qui ressemble à ceci "abc, def, ghi" (notez les virgules)? Pour ceux qui ont l'envie de me dire que je ferais mieux d'utiliser une méthode Java pour concaténer la chaîne, écoutez ceci: chaque membre de la liste devrait être rendu comme un commandLink séparé.

Si JSF simple, il ressemblerait à ceci:

<h:commandLink>abc</h:commandLink>, <h:commandLink>def</h:commandLink>, <h:commandLink>ghi</h:commandLink> 

Répondre

8

En supposant que #{bean.items} rendements List<String> ou String[], dans 1.x JSF vous pouvez utiliser JSTL c:forEach avec varStatus. Il vous donne un handle à LoopTagStatus qui a une méthode isLast().

<c:forEach items="#{bean.items}" var="item" varStatus="loop"> 
    <h:commandLink value="#{item}" /><c:if test="#{!loop.last}">, </c:if> 
</c:forEach> 

En Facelets comme livré avec JSF 2.x, même fonctionnalité est disponible par ui:repeat.

<ui:repeat value="#{bean.items}" var="item" varStatus="loop"> 
    <h:commandLink value="#{item}" />#{!loop.last ? ', ' : ''} 
</ui:repeat> 
+0

votre solution sur ne fonctionnait pas hors de la boîte pour moi, mais il m'a guidé à ce poste forum http://seamframework.org/Community/SolutionForUirepeatWithVarStatusAndNewParametersFromAndTo qui ont ma réponse et plus encore. merci .. – bungrudi

+0

Cela ne fonctionne que sur JSF 2.x. Vous semblez utiliser JSF 1.x. La première solution est alors plus applicable sur vous. – BalusC