JSF2.2-对ui:repeat中的所有内容进行求值,尽管rendered=“false”

JSF2.2-对ui:repeat中的所有内容进行求值,尽管rendered=“false”,jsf,jsf-2,richfaces,facelets,uirepeat,Jsf,Jsf 2,Richfaces,Facelets,Uirepeat,我目前正在将一个web应用程序从JSF1.2/Richfaces 3.3.3迁移到JSF2.2进行数据迭代,我们使用了a4j:repeat from Richfaces。我现在想把迭代器改为ui:repeat,因为我们想抛出Richfaces 然而,我遇到了一个非常奇怪的行为。想象一下,从原始代码中简化出这样一个代码片段: <ui:repeat id="criterions" var="criterion" value="#{AdvancedSearchBean.criterionList

我目前正在将一个web应用程序从JSF1.2/Richfaces 3.3.3迁移到JSF2.2进行数据迭代,我们使用了a4j:repeat from Richfaces。我现在想把迭代器改为ui:repeat,因为我们想抛出Richfaces

然而,我遇到了一个非常奇怪的行为。想象一下,从原始代码中简化出这样一个代码片段:

<ui:repeat id="criterions" var="criterion" value="#{AdvancedSearchBean.criterionList}">
    <h:panelGroup rendered="#{criterion.searchCriterion.displayType == 'PERSON'}">
        <h:inputText value="#{criterion.searchString}"/>
    </h:panelGroup>
</ui:repeat>
将计算panelGroup内的零件,尽管渲染条件的计算结果肯定为false。如果我将ui:repeat更改为a4j:repeat,则工作正常,不会评估panelGroup中的零件

这对于我们的代码来说是一个真正的问题,因为标准变量可以包含扩展同一超类的不同对象。在这种情况下,Criteria对象不包含名为searchString的属性,因为它不是PERSON类型->引发错误

有人能解释这种行为或有解决办法吗? 我使用的是集成在WildFly 8.0.0.final Mojarra 2.2.5-jbossorg-3中的JSF版本

谢谢
Markus

您应该尝试使用而不是==参见eq,ne,le…@djnose==和eq做同样的事情。我认为在ui:repeat在范围中设置条件变量之前,会对panelGroup的呈现属性进行评估。尝试将ui:repeat替换为c:forEach。您找到解决方案了吗?我在JSF2.1.29-4中遇到了一个类似的问题。这里,不会呈现ui:repeat本身,但会计算其el表达式,这会导致异常。将ui:repeat更改为a4j:repeat可以修复它…不太可能。我的解决方案与您的相同,使用不同的迭代器。在我的例子p中:来自PrimeFaces的数据列表。现在一切正常。