@postconstruct方法在ajax-refresh期间通过导航菜单调用主要内容部分

时间:2013-03-27 11:25:55

标签: jsf-2

我正在尝试从导航菜单中刷新主要内容。

链接中的要求完全相同

How to ajax-refresh dynamic include content by navigation menu? (JSF SPA)

遵循BalusC回答的模式,

<h:panelGroup id="content" layout="block">
<h:form id="contentform">
    <h:panelGroup rendered="#{bean.page == 'include1'}">
        <ui:include src="include1.xhtml" />
    </h:panelGroup>
    <h:panelGroup rendered="#{bean.page == 'include2'}">
        <ui:include src="include2.xhtml" />
    </h:panelGroup>
    <h:panelGroup rendered="#{bean.page == 'include3'}">
        <ui:include src="include3.xhtml" />
    </h:panelGroup>
</h:form>

每个xhtml都有自己的托管bean和@PostConstruct方法,问题是所有的@PostConstruct方法都被调用,而不管渲染条件如何。

1 个答案:

答案 0 :(得分:2)

<ui:include/>是一个标记处理程序,而<h:panelGroup/>是一个渲染时标记。不同之处在于它们在构建的生命周期中的不同时间都是活动的。在这种特殊情况下,<ui:include/>处于活动状态并在<h:panelGroup/>之前处理。因此,虽然渲染条件可能会在渲染时隐藏动态包含,但仍然会通过grinder进行包含,从而导致处理过的托管bean。

您应该将rendered属性放在<ui:include/>上。确保渲染条件不依赖于其他渲染时间构造