有条件地创建表行JSF2
我想创建一个表,在几行中显示一个值列表,每行应该只包含3列 我可以通过使用JSTL而不是JSF来创建它。我怀疑这是与xhtml相关的问题,而不是JSP中的问题,xhtml对元素的形成非常严格。有没有办法做到这一点 使用JSTL:有条件地创建表行JSF2,jsf,jsf-2,facelets,Jsf,Jsf 2,Facelets,我想创建一个表,在几行中显示一个值列表,每行应该只包含3列 我可以通过使用JSTL而不是JSF来创建它。我怀疑这是与xhtml相关的问题,而不是JSP中的问题,xhtml对元素的形成非常严格。有没有办法做到这一点 使用JSTL: <c:forEach var="book" value="${bookBean.bookList}" varStatus="bookStatus"> <c:if test="${bookStatus.index eq 0 or bookStatus
<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>
#{book.bookId}
#{book.bookName}
#{book.price}
#{book.author}
使用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>
#{book.bookId}
#{book.bookName}
#{book.price}
#{book.author}
如果不使用某些组件库,这实际上是不容易做到的(我知道richfaces有一个组件可以做到这一点……)
这是我不久前找到的解决这个问题的方法。。。(我自己也不太喜欢组件库…)。。这不是最优雅的解决方案。。但它确实起了作用
<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="</tr><tr>" escape="false" rendered="#{(bookStatus.index + 1 ) mod 3 eq 0}"/>
</ui:repeat>
</tr>
</table>
#{book.bookId}
#{book.bookName}
#{book.price}
#{book.author}
正如@FMQ所提到的,尝试使用JSF组件库。签出页面可能是一个不错的选择