我有一个测试.xhtml页面,我在其中定义了一个事件
<f:metadata>
<f:event type="preRenderView" listener="bean.setUrl()"/>
</f:metadata>
页面中还有一个插入标签。
<ui:insert name="melcontent">
<ui:include id="contentscreen" src="bean.url"/>
</ui:insert>
现在的问题是我想在预渲染事件中动态设置这个包含 src 页面 src="/page/somepage.xhtml",在支持 bean 中的某个位置,并希望从该支持 bean 加载包含标签,但在预呈现调用侦听器之前,包含甚至在预渲染之前就已经执行了。 任何人都可以提出实现这一目标的方法吗? 提前谢谢。
标记 ui:include 是一个标记处理程序,这意味着它在视图构建时而不是视图渲染时运行。因此,preRenderView稍后发生。
构建时间标记 - 它们用于更改组件树的构建。它们在渲染期间不会进行任何更改。
渲染时间 - 当视图呈现以生成 HTML 时。它发生在以后。
如果你确实需要使用 ui:include 来做到这一点,你可以添加一个由 ui:fragment 包装的包含列表,其中包含一个渲染属性,因为 ui:fragment 渲染属性将在渲染时进行评估。喜欢:
<h:panelGroup id="panel">
<ui:fragment rendered="#{bean.conditionFirstFile}">
<ui:include src="first.xhtml"/>
</ui:fragment>
<ui:fragment rendered="#{bean.conditionSecond}>
<ui:include src="second.xhtml"/>
</ui:fragment>
...
</h:panelGroup>