使用 ui:repeat 遍历列

Using ui:repeat to iterate over columns

我在 Mojarra 2.1.29.

我尝试遍历集合以生成等于集合大小的行数。这是我尝试过的:

<rich:dataTable id="table"
                       var="partner"
                       rows="10"
                       value="#{testBean.k}">

    <ui:repeat var="name" value="#{testBean.cols}"> 
           <rich:column>
               <f:facet name="header">
                   <h:outputText value="#{name}"/>
               </f:facet>
               <h:outputText value="#{m.get(partner)}"/>
               <f:facet name="footer">
                   <h:outputText value="#{name}}"/>
               </f:facet>
           </rich:column>
    </ui:repeat>
</rich:dataTable>

testBean.cols初始化如下:

public class TestBean{
    private List<String> cols = new ArrayList<>();

    public TestBean() {
        cols.add("Col 1");
        cols.add("Col 2");
    }
}

没用。结果是 table 和 0 列。出了什么问题,有办法解决吗?

我已通过将表达式 #{partnerListController.cols} 放入标记并获取 [Col 1, Col 2].

来确保将其解析为非空列表

为什么我不能遍历这样的列表?

使用 c:foreach 而不是 @Kukeltje 建议的 ui:repeat 可能会起作用,但是通过迭代 Collection 创建动态列的正确方法是使用 <rich:columns>组件。

来自 https://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/rich_columns.html:

The <rich:columns> component gets a list from data model and outputs a corresponding set of columns inside <rich:dataTable> on a page. It is possible to use "header" and "footer" facets with <rich:columns> component.

The "value" and "var" attributes are used to access the values of collection.

<rich:dataTable value="#{testBean.k}" var="partner" id="table" rows="10">
   <rich:columns value="#{testBean.cols}" var="name">
           <f:facet name="header">
               <h:outputText value="#{name}"/>
           </f:facet>
           <h:outputText value="#{m.get(partner)}"/>
           <f:facet name="footer">
               <h:outputText value="#{name}"/>
           </f:facet>>
   </rich:columns>
</rich:dataTable>