4 Replies Latest reply on Sep 18, 2007 4:50 AM by Denis Zjukow

    tags c:forEach and ui:repeat

    Denis Zjukow Newbie

      Hello,

      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!