2

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

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

4

1 回答 1

3

标签 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>
于 2015-01-15T13:14:23.773 回答