jsf-2 - ui :repeat JSF 2. 0 无法呈现迭代 p:row primefaces

标签 jsf-2 primefaces

我在这里遇到了问题,我的系统配置是 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>  

我发现这会生成相当难看的界面,所以我从 primefaces 中运行了 p:panelGrid
在我写了一些代码之后,按照我的预期它会工作,但它不会:(
此代码完美呈现 header ,但在 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>  

我是不是错过了什么……?
或者这是一个错误..?因为我跑遍了谷歌寻找这种代码,但我一无所获。
此致,
蓝蓝Z

最佳答案

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

然而,<p:panelGrid>期望物理多个<p:row><p:column> child ,不是一个<ui:repeat>其中有一个 <p:row> .换句话说,它们需要在 View 构建时而不是 View 渲染时准备好。

JSTL <c:forEach>是一个 View 构建时间标签。它将在物理上生成多个 <p:row>组件进入 JSF 组件树,因此 <p:panelGrid>只会找到 <p:row> children 。

<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>

注意:这会破坏早于 2.1.18 的 Mojarra 版本中的 View 范围 bean。如果你不能升级,那么考虑一个<p:dataTable>相反,正如您自己已经发现的那样。

另见:

关于jsf-2 - ui :repeat JSF 2. 0 无法呈现迭代 p:row primefaces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10719233/

相关文章:

java - 文件路径(JAVA EE)

java - PrettyFaces 和 JSF 2 : Do we always need to pass parameters to the URL to retrieve them?

jsf-2 - 如何在 JSF 组件树中查找复合组件?

forms - 仅在没有其他组件的消息时显示消息

pdf - 默认 header p :media with pdf player

validation - 如何验证素数树 <p :tree>

jsf-2 - 如何从链接/非面孔请求调用 JSF 支持 bean 方法

javascript - 将 java 变量传递给 javascript 函数

jsf-2 - 在 JSF 2.0 中设置 OK(提交)按钮

primefaces - 水平滚动 PrimeFaces 数据表?