Java 为什么p:panelGrid不能与ui:repeat一起工作?

Java 为什么p:panelGrid不能与ui:repeat一起工作?,java,jsf,primefaces,Java,Jsf,Primefaces,如果我像下面那样使用,我不会得到任何错误,也不会得到任何输出。 为什么p:panelGrid不能与ui:repeat一起工作 注意:我不想使用c:forEach,因为我已经面临很多JSF问题 <p:panelGrid> <ui:repeat value="#{MyBean.dataList}" var="data"> <p:row> <p:column> <h:o

如果我像下面那样使用,我不会得到任何错误,也不会得到任何输出。 为什么
p:panelGrid
不能与
ui:repeat
一起工作

注意:我不想使用
c:forEach
,因为我已经面临很多JSF问题

<p:panelGrid>
    <ui:repeat value="#{MyBean.dataList}" var="data">
        <p:row>
            <p:column>
                <h:outputText value="#{data.name}"/>
            </p:column>
            <p:column>
                <h:outputText value="#{data.description}"/>
            </p:column>
        </p:row>
    </ui:repeat>
</p:panelGrid>

MyBean.java

public List<Data> getDataList(){
    List<Data> result = new ArrayList<Data>();
    result.add(new Data("Name 1", "Description 1"));
    result.add(new Data("Name 2", "Description 2"));
    result.add(new Data("Name 3", "Description 3"));
    result.add(new Data("Name 4", "Description 4"));
    return result;
}   
public List getDataList(){
列表结果=新建ArrayList();
结果。添加(新数据(“名称1”、“说明1”);
结果。添加(新数据(“名称2”、“说明2”);
结果。添加(新数据(“名称3”、“说明3”);
结果。添加(新数据(“名称4”、“说明4”);
返回结果;
}   
带素数面的预期输出


p:panelGrid
中定义
列试试,因为您有静态数字列,那么您应该定义
。它会起作用。
但是我建议您为此使用
primefaces数据表

<p:dataTable id="availableCars" var="car" value="#{tableBean.carsSmall}">  
    <p:column style="width:20px">  
        <h:outputText id="dragIcon"  
            styleClass="ui-icon ui-icon-arrow-4" />  
        <p:draggable for="dragIcon" revert="true" />  
    </p:column>  

    <p:column headerText="Model">  
        <h:outputText value="#{car.model}" />  
    </p:column>  

    <p:column headerText="Year">  
        <h:outputText value="#{car.year}" />  
    </p:column>  

    <p:column headerText="Manufacturer">  
        <h:outputText value="#{car.manufacturer}" />  
    </p:column>  

    <p:column headerText="Color">  
        <h:outputText value="#{car.color}" />  
    </p:column>  
</p:dataTable>  


您可以从中找到此代码和primnefaces showcase。我认为它将满足您的要求

ui:repeat
将不起作用,因为它实际上不会将组件添加到组件树中

ui:repeat
仅在渲染阶段有效,并使用不同的状态多次重新渲染其子组件

一些组件,例如
panelgrid
,但也包括
datatable
,希望在组件树中有某些子组件才能正常工作。因为
ui:repeat
没有添加这些,所以这种方法不起作用

很抱歉,通常的解决方案是使用
c:foreach
,它会将子项添加到树中


请参见

为什么不改用p:dataTable?p:panelGrid用于静态表。@mrembisz由于我的用户界面,我无法使用它。如果您想要我的用户界面,我将上传您似乎不理解标记处理程序和UI组件之间的区别。使用
c:forEach
不应该害怕,而应该理解。另见@BalusC谢谢我将参考Hanks,它无法满足我的预期输出。请参考我的有问题的图片。我上传我的新图片以获得预期的输出。如何使用datatable。为此,我建议您只使用带有colspan和rowspan的简单HTML表