ui:include包括prerender事件jsf之前的页面

时间:2015-01-15 12:27:39

标签: jsf facelets uiinclude prerenderview

我有一个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 =&#34; /page/somepage.xhtml"动态地在prerender事件中某些在支持bean中并且想要加载包含来自该支持bean的标记但在prerender调用listener之前,include甚至在prerender之前就已经执行了。任何人都可以建议一种方法来实现这一目标。提前谢谢。

1 个答案:

答案 0 :(得分:3)

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

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

渲染时间 - 渲染视图以生成HTML。它发生在以后。

如果你确实需要使用ui:include,你可以添加一个包含ui:fragment包含渲染属性的包含列表,因为ui:fragment rendering属性将在渲染时被评估。像:

<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>