我有一个页面,想根据视图参数的值包含页面的一部分(在这种情况下是页脚)。
我有一个ViewScoped
后端bean,在preRenderView
上初始化。
<f:metadata>
<f:viewParam name="racecode" value="#{displayResults.racecode}" />
<f:event type="preRenderView" listener="#{displayResults.init}" />
</f:metadata>
这个查询数据库以获取要包含的页脚名称。然后将其用于以下方式:
<h:panelGroup id="customFooter" display="block">
<ui:include src="#{displayResults.customFooter}" />
</h:panelGroup>
这总是给我一个缺失的页面。但是如果我手动输入页面名称,它就可以工作。如果我用 h:outputText
替换 ui:include
,也是一样。
我理解这与JSF的阶段有关,在完成 ui:include
时,该值尚未设置。(阅读并更好地了解各个阶段是我的待办事项之一)。
问题仍然存在。如何完成类似的操作。让一个bean使用 viewParam,查询数据库并在 ui:include
中使用该值?
preRenderView
完全更改为这个,将所有内容放在一个位置?另外,这里为什么是@RequestScoped
? - blo0p3r@ManagedProperty
在彼此之间注入bean。@RequestScoped
是强制性的,原因有两个:1)#{param}
是请求作用域 2)<ui:include>
是一个taghandler。所以@ViewScope
绝对不是一个选项。 - BalusC