2012-07-13 86 views
0

我想创建一个表,它显示了多行中的值列表,每行应该只包含3列。有条件地创建表行JSF2

我可以使用JSTL创建,但不使用JSF。我怀疑它是xhtml相关的问题,在JSP中不是问题,xhtml对元素形成非常严格。有没有办法做到这一点?

使用JSTL:

<c:forEach var="book" value="${bookBean.bookList}" varStatus="bookStatus"> 
    <c:if test="${bookStatus.index eq 0 or bookStatus.index mod 3 eq 0}"> 
    <tr> 
    </c:if> 
     <td> 
     <table> 
      <tr> 
     <td>#{book.bookId}</td> 
     <td>#{book.bookName}</td> 
     <td>#{book.price}</td> 
     <td>#{book.author}</td> 
      </tr> 
      </table> 
     </td> 
<c:if test="${bookStatus.count mod 3 eq 0}"> 
    </tr> 
</c:if> 
</c:forEach> 

使用JSF:

<ui:repeat var="book" value="#{bookBean.bookList}" varStatus="bookStatus"> 
    <ui:fragment rendered="#{bookStatus.first or bookStatus.index mod 3 eq 0}"> 
     <tr> <!-- Here i am getting an error saying closing tr missed.---> 
     </ui:fragment> 
      <td> 
      <table> 
       <tr> 
      <td>#{book.bookId}</td> 
      <td>#{book.bookName}</td> 
      <td>#{book.price}</td> 
      <td>#{book.author}</td> 
       </tr> 
       </table> 
      </td> 
     <ui:fragment rendered="#{(bookStatus.index+1) mod 3 eq 0}"> 
     </tr> 
     </ui:fragment> 
    </ui:repeat> 

回答

1

其实,这是不容易做到的,而不使用一些组件库(RichFaces的我知道有这是否一个组成部分事实... rich:dataGrid ..)

下面是我发现一段时间来解决这个问题的解决方案...(我不是组件库的忠实粉丝......)它不是最优雅的解决方案..但它的窍门..

<table> 
    <tr> 
    <ui:repeat var="book" value="#{bookBean.bookList}" varStatus="bookStatus"> 
     <td> 
     <table> 
      <tr> 
       <td>#{book.bookId}</td> 
       <td>#{book.bookName}</td> 
       <td>#{book.price}</td> 
       <td>#{book.author}</td> 
      </tr> 
     </table> 
     </td> 
     <h:outputText value="&lt;/tr&gt;&lt;tr&gt;" escape="false" rendered="#{(bookStatus.index + 1) mod 3 eq 0}"/> 
    </ui:repeat>    
    </tr>       
</table> 
0

正如@FMQ提到,尝试使用JSF组件库。 Primefaces可能是一个不错的选择,结账Demo页面。