我正在尝试从导航菜单中刷新主要内容。
链接中的要求完全相同
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方法都被调用,而不管渲染条件如何。
答案 0 :(得分:2)
<ui:include/>
是一个标记处理程序,而<h:panelGroup/>
是一个渲染时标记。不同之处在于它们在构建的生命周期中的不同时间都是活动的。在这种特殊情况下,<ui:include/>
处于活动状态并在<h:panelGroup/>
之前处理。因此,虽然渲染条件可能会在渲染时隐藏动态包含,但仍然会通过grinder进行包含,从而导致处理过的托管bean。
您应该将rendered
属性放在<ui:include/>
上。确保渲染条件不依赖于其他渲染时间构造