Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有条件地创建表行JSF2_Jsf_Jsf 2_Facelets - Fatal编程技术网

有条件地创建表行JSF2

有条件地创建表行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

我想创建一个表,在几行中显示一个值列表,每行应该只包含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>

#{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="&lt;/tr&gt;&lt;tr&gt;" escape="false" rendered="#{(bookStatus.index + 1 ) mod 3 eq 0}"/>
    </ui:repeat>               
  </tr>                        
</table>  

#{book.bookId}
#{book.bookName}
#{book.price}
#{book.author}

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