ui:include 在预呈现事件 jsf 之前包含页面

ui:include includes page before prerender event jsf

我有一个 test.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>

现在的问题是我想在 prerender 事件中动态地设置这个 include src 页面 src="/page/somepage.xhtml" prerender 调用 listener,include 甚至在 prerender 之前就已经执行了。任何人都可以提出一种方法来实现这一目标。提前致谢。

标签 ui:include 是一个标签处理程序,这意味着它在视图构建时而不是视图渲染时运行。所以 preRenderView 稍后发生。

构建时间标签 - 它们用于更改组件树的构建。他们不会在渲染时间内做任何改变。

Render Time - 渲染视图时生成 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>