Jsf h:dataTable getter调用,尽管呈现=";假;

Jsf h:dataTable getter调用,尽管呈现=";假;,jsf,jsf-2.2,Jsf,Jsf 2.2,我有一个dataTable,它的getter在不应该调用的时候被调用。我们将JSF2.2.6与CDI一起使用 以下是xthml文件中的部分: <h:panelGroup rendered="false"> <h:dataTable id="someObjectTable" border="0" width="900" value="#{SomeController.someObjects}" rowClasses="odd, even"

我有一个dataTable,它的getter在不应该调用的时候被调用。我们将JSF2.2.6与CDI一起使用

以下是xthml文件中的部分:

<h:panelGroup rendered="false">
    <h:dataTable id="someObjectTable" border="0" width="900"
        value="#{SomeController.someObjects}"
        rowClasses="odd, even" var="value" columnClasses="formLeft, formRight"
        listHeight="">

    </h:dataTable>
</h:panelGroup>

这是豆子:

public List<SomeObject> getSomeObjects(){
    //... ... ...
    return resutList;
}
public List getSomeObjects(){
//... ... ...
返回结果列表;
}

即使dataTable周围的panelGroup将其呈现设置为false,也会调用getSomeObjects。为什么呢?即使它不会被渲染,也应该调用它吗

我找到了一个解决方案,但有点棘手

尝试使用jstl标记

<c:if test="#{renderCondition}">
    <h:dataTable id="someObjectTable" border="0" width="900"
        value="#{SomeController.someObjects}"
        rowClasses="odd, even" var="value" columnClasses="formLeft,formRight"
    listHeight="">
    </h:dataTable>
</c:if>


模板中是否正确声明了
xmlns:h
?如果是这样的话,请编辑问题以包含getter中调用的
Thread.dumpStack()
的单个结果,这样我们就可以看到谁在调用它以及为什么调用它。为什么很棘手?请记住,在这种情况下,您不能再使用ajax UpdateEyeah进行渲染。您是对的,它不能使用ajax更新进行渲染,除非它不是从外部更新的。在我的项目中,我从外部更新了它,这就是为什么我没有看到它。