tags c:forEach and ui:repeat
denis.zjukow Sep 17, 2007 10:33 AMHello,
Having struggled for a couple of days I finally gave up and decided to ask for help.
I use Seam with Facelets. What I want is to show a list of entities in a table cell i.e a single cell may contain a comma-separted list.
Let's say I have two entity types: Item and Subitem. An instance of type Item may have a number of Subitems. In my case the relation between these two entity types is many-to-many.
So if I have Item1 with three subitems: Subitem1, Subitem2 and Subitem3, I want to see something like this:
<table> ... <tr> ... <td>Subitem1,SubItem2,Subitem3</td> ... </tr> ... </table>
Please note that I don't want a comma after the last subitem in a cell (Subitem3 in this case). Nothing special, an obvious requierment, isn't it?
The first thing I tried was ui:repeat:
<!-- Table, each row represents an item. -->
<h ataTable value="items" var="item">
...
<!-- This is my tricky column. -->
<h:column>
<!-- I want to see all subitems in a single cell. -->
<ui:repeat value="#{item.subitems}" var="subitem">
<!-- Show a subitem. -->
<h utputText value="#{item.subItems}" />
<!-- Add separator. -->
<h utputText value="," />
</ui:repeat>
<h:column>
...
</h ataTable>
Everything's fine except for the fact that there is a nasty comma after the last subitem. This made me try c:forEach tag:
...
<!-- I want to see all subitems in a single cell. -->
<c:forEach items="#{item.subitems}" var="subitem" varStatus="stat">
<!-- Show a subitem. -->
<h utputText value="#{item.subItems}" />
<!-- Add separator for each subitem except for the last one. -->
<c:if test="#{!stat.last}">
<h utputText value="," />
</c:if>
</ui:repeat>
...
Unfortunately this code won't work! It just leaves my favorite column empty. It seams that c:forEach do not see variable item.
I then tried to find a way to add the conditional logic to ui:repeat, but haven't managed to find anything like c:forEach's 'varStatus'.
Any ideas? Thank you all in advance!