【问题标题】:h:dataTable getter called despite rendered="false"尽管已渲染 =“false”,但仍调用了 h:dataTable getter
【发布时间】:2014-09-03 09:05:07
【问题描述】:

我有 dataTable,它的 getter 在不应该被调用的时候被调用。我们使用 JSF 2.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;
}

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

【问题讨论】:

  • xmlns:h 是否在模板中正确声明?如果是这样,请编辑问题以在 getter 中包含 Thread.dumpStack() 调用的单个结果,以便我们查看谁在调用它以及为什么调用它。

标签: jsf jsf-2.2


【解决方案1】:

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

尝试使用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>

【讨论】:

  • 为什么这么棘手?请记住,在这种情况下,您可以不再使用 ajax 更新来渲染它
  • 是的,你是对的,它不能用 ajax 更新来呈现,除非它不是从外部更新的。在我的项目中,我从外部对其进行了更新,这就是为什么我没有看到它。
猜你喜欢
  • 2011-05-18
  • 1970-01-01
  • 2011-06-14
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多