6

如果我按以下方式使用,则不会出现错误,也不会输出。为什么不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;
}   

primefaces 的预期输出

在此处输入图像描述

4

2 回答 2

11

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

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

某些组件,例如panelgrid, but also datatable,希望在组件树中具有某些子级才能正常工作。由于ui:repeat不添加这些,因此这种方法不起作用。

我很抱歉,但正常的解决方案是使用c:foreach,它确实将孩子添加到树中。

https://rogerkeays.com/jsf-c-foreach-vs-ui-repeat

于 2012-10-19T11:13:20.360 回答
0

尝试通过定义columnsinp:panelGrid因为你有静态数字列然后你应该定义<p:panelGrid columns="">它。它会起作用。
但我建议你使用primefaces datatable这个

<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 展示的链接。我认为它会满足您的要求

于 2012-10-19T11:01:41.130 回答