Primefaces数据表不遵守渲染标记的条件重新定位

时间:2015-01-26 08:32:55

标签: jsf primefaces

我有这样的代码:

<p:outputPanel id="conditionalPanel">
    <p:panel rendered="#{object.category.string == 'foo'}">
        <ui:param name="foo" value="#{object}"/>
        <h:panelGrid columns="3" id="fooAssignmentsuttonGrid">
            <h:outputLabel for="barToAdd" styleClass="desc" value="#{foobarzooUIData.label}"/>
            <h:selectOneMenu id="barToAdd" value="#{fooController.barToAdd}">
                <f:selectItems value="#{barsToAddAssignments}"
                               var="foobarzoo" itemValue="#{foobarzoo}" 
                               itemLabel="#{foobarzooUIData.buildLabelForObject(foobarzoo)}"/>
            </h:selectOneMenu>
            <p:commandButton value="#{text['button.add']}" process="@this barToAdd" 
                             update="assignmentDetail" disabled="#{empty barsToAddAssignments}"
                    action="#{fooController.createNewAssignment(foo)}">
            </p:commandButton>
        </h:panelGrid>
        <p:outputPanel id="fooAssignmentsTable">
            <p:dataTable value="#{utils:toList(foo.fooAssignments)}" var="assignment">
                <!-- p:columns here etc..-->
            </p:dataTable>
        </p:outputPanel>

        <p:outputPanel id="assignmentDetail">
            <p:panel rendered="#{not empty fooController.selectedAssignment}" style="margin-top: 30px;">
                <h:panelGrid id="assignmentDetailForm" styleClass="formsTable" columns="2">
                   <!-- Some kick ass code here -->
                </h:panelGrid>
            </p:panel>
        </p:outputPanel>
    </p:panel>
</p:outputPanel>

问题是,当我点击此页面时

 object.category.string == 'foo'

不满意,我还是得到了:

/test.xhtml @264,147 value="#{utils:toList(foo.fooAssignments)}": The class 'com.foo.bar.too does not have the property 'fooAssignments'.

是的,我知道这个类没有这个属性,但是根本不应该对它进行评估,不是吗?

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

很遗憾,你没有发布完整的堆栈跟踪,因为这通常代表了我自己的整个答案,我可以将其转化为外行人的条款。

通常这会在component tree visit not obeyed期间发生,rendered属性为PropertyNotFoundException on conditionally rendered subclasses in ui:repeat。提到堆栈跟踪和正在使用的实际版本应该揭示它是否是一个&#34;功能&#34;或实际上是在使用的JSF impl或PrimeFaces中的错误。一般来说,我会说这会是一个错误。以前在Mojarra的<ui:repeat>中观察到了这个问题,并且已经在这方面得到了解决。另请参阅此相关问答:JSTL in JSF2 Facelets... makes sense?

如果升级到最新的JSF impl和PrimeFaces版本没有帮助,那么最好的办法是有条件地构建视图而不是有条件地渲染视图。 JSTL对此非常有帮助。另请参阅{{3}}

<c:if test="#{object.category.string == 'foo'}">
    <p:panel>
        ...
    </p:panel>
</c:if>