【问题标题】:Conditionally creating table rows JSF2有条件地创建表行 JSF2
【发布时间】:2012-07-13 04:15:41
【问题描述】:

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

【问题讨论】:

    标签: jsf jsf-2 facelets


    【解决方案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>  
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-10
        • 1970-01-01
        • 2015-04-26
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        相关资源
        最近更新 更多