2012-07-13 89 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頁面。