ui:重复JSF 2.0无法呈现迭代p:行primefaces

Wir*_*Adi 3 primefaces jsf-2

我在这里遇到了一个问题,我的系统配置是Mojarra 2.1.7,Primefaces 3.2和使用Glassfish 3.1+.

在此之前,我使用以下代码很好地渲染了我的代码:

<p:tabView>
    <p:tab title="Offices Access" >
         <h:outputText value="Access | Offices Name | Offices Code | Parent Offices" style="font-weight: bold;"/>

         <ui:repeat value="#{userBean.officeses}" var="office">
              <h:panelGrid columns="2">
                   <p:selectBooleanCheckbox id="access#{office.officesID}" style="width: 50px;"/>
                   <h:outputLabel for="access#{office.officesID}" value="#{office.officesName} | #{office.officesCode} | #{office.parentOffices}"/>
               </h:panelGrid>
         </ui:repeat>
     </p:tab>
</p:tabView>  
Run Code Online (Sandbox Code Playgroud)

我发现这会产生相当丑陋的界面,所以我p:panelGrid从主要界面跑了过来.
在我编写一些代码并且从我的期望中它会起作用,但它不会:(
这段代码完美呈现标题,但在ui:repeat代码之后,它不会渲染它p:rowp:column内部.

这是代码:

<p:tabView>
    <p:tab title="Offices Access" >
        <p:panelGrid styleClass="centerContent">
             <f:facet name="header">
                 <p:row>
                     <p:column style="font-weight: bold;">Access</p:column>
                     <p:column style="font-weight: bold;">Offices Name</p:column>
                     <p:column style="font-weight: bold;">Offices Code</p:column>
                     <p:column style="font-weight: bold;">Above Level Offices</p:column>
                 </p:row>
            </f:facet>

            <ui:repeat value="#{userBean.officeses}" var="office">
                <p:row id="rowforOffice#{office.officesID}">
                    <p:column><p:selectBooleanCheckbox id="access#{office.officesID}"/></p:column>
                    <p:column><h:outputText value="#{office.officesName}"/></p:column>
                    <p:column><h:outputText value="#{office.officesCode}"/></p:column>
                    <p:column><h:outputText value="#{office.parentOffices}"/></p:column>
                </p:row>
            </ui:repeat>
       </p:panelGrid>
    </p:tab>
</p:tabView>  
Run Code Online (Sandbox Code Playgroud)

我想念一下......?
或者这是一个错误..?因为我跑过谷歌寻找这种代码,我一无所获.
此致,
bLueZ

Bal*_*usC 6

至于具体问题,<ui:repeat>是一个视图渲染时间标记.因此,它实际存在于JSF组件树中,并且需要多次迭代该值来生成其HTML输出.

然而,<p:panelGrid>期望身体多个<p:row><p:column>儿童,而不是单个<ui:repeat>与其中一个<p:row>.换句话说,它们需要在视图构建时间而不是视图渲染时间内准备.

JSTL <c:forEach>是一个视图构建时标记.它将<p:row>在JSF组件树中生成物理上的多个组件,因此它们<p:panelGrid>只能找到<p:row>子组件.

<p:panelGrid styleClass="centerContent">
    <c:forEach items="#{userBean.officeses}" var="office">
        <p:row id="rowforOffice#{office.officesID}">
            <p:column><p:selectBooleanCheckbox id="access#{office.officesID}"/></p:column>
            <p:column><h:outputText value="#{office.officesName}"/></p:column>
            <p:column><h:outputText value="#{office.officesCode}"/></p:column>
            <p:column><h:outputText value="#{office.parentOffices}"/></p:column>
        </p:row>
    </c:forEach>
</p:panelGrid>
Run Code Online (Sandbox Code Playgroud)

注意:这会破坏早于2.1.18的Mojarra版本中的视图范围bean.如果你无法升级,那就考虑一下<p:dataTable>,因为你已经发现了自己.

也可以看看: