ui重复p:panelGrid和其他ui在primefaces内重复

时间:2015-10-02 02:23:58

标签: jsf primefaces datagrid

我在使用ui repeat和数据网格以及其他ui在此网格中重复时遇到问题

这是我的代码

<ui:repeat var="blockSpace" value="#{providersMB.fillBlockSpaceRsv}" >
<p:panelGrid style="margin-top:20px" rendered="#{providersMB.blockSpace}">
    <f:facet name="header">                     
        <p:row>
            <p:column>
                <h:outputLabel value="#{blockSpace.company}" />                                     
           </p:column>
           <p:column>#{label['displayOrders.label.businessClass']}/p:column>
           <p:column>#{label['displayOrders.label.yankeeClass']}</p:column>                                                         
        </p:row>                 
    </f:facet>

    <p:row>
        <p:column>#{label['displayOrders.label.reservation']}</p:column>                         
        <p:column><p:spinner id="basic" value="#{spinnerView.number1}" />
        </p:column>                      
        <p:column>
        <p:spinner id="spinner" value="#{spinnerView.number1}" />
        </p:column>

    </p:row>

    <p:row>
        <p:column>#{label['displayOrders.label.configuration']}</p:column>
        <ui:repeat var="blockSpaceCabin" 
             value="#{blockSpace.blockSpaceCabin}" >
           <p:column> <h:outputLabel value="#{blockSpaceCabin.quantity}"/>                     
           </p:column>
        </ui:repeat>                                            
    </p:row>                       
</p:panelGrid>

第二个uirepeat的值没有显示。

1 个答案:

答案 0 :(得分:0)

ui:在视图渲染时间内重复运行,而p:panelGrid在视图构建时运行。 PanelGrid会在视图构建期间期望它们的子元素,但由于它们在渲染时可用,因此它会失败。

在第二个ui上尝试这个:重复。改变ui:用c:forEach重复

<c:forEach items="#{blockSpace.blockSpaceCabin}" var="blockSpaceCabin">
    <p:column>
        <h:outputLabel value="#{blockSpaceCabin.quantity}"/>                     
    </p:column>
</c:forEach>

您也可以在此处使用BalusC的帖子: c:forEach inside primefaces(e.g. p:panelgrid) inside ui:repeat

另一方面,由于你有一个3列的布局,你不能在#{blockSpace.blockSpaceCabin}中有两个以上的元素,所以你可以在第一个forEach中定义的blockSpace元素上将它们设置为#{ providersMB.fillBlockSpaceRsv}。最好不要将jstl标签与jsf混合使用,以免让人高枕无忧。