我想创建一个表,显示多行中的值列表,每行只包含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.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>
答案 0 :(得分:1)
如果不使用某些组件库(我知道有一个组件可以执行此操作的事实丰富的表面,这实际上并不容易。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="</tr><tr>" escape="false" rendered="#{(bookStatus.index + 1 ) mod 3 eq 0}"/>
</ui:repeat>
</tr>
</table>
答案 1 :(得分:0)
正如@FMQ所提到的,尝试使用JSF组件库。 Primefaces可能是一个不错的选择,请查看Demo页面。