在运行时解析facelets组件

时间:2009-07-20 14:04:12

标签: java jsf facelets

您知道在运行时选择不同facelets组件的方法吗?

我有一些类似的代码:

<s:fragment rendered="#{r== 'case1'}">
     <div>
           <ui:include src="case1.xhtml" />
     </div>
 </s:fragment>
 <s:fragment rendered="#{r== 'case2'}">
     <div>
            <ui:include src="case2.xhtml" />
     </div>
 </s:fragment>

我想写

<ui:include src="#{r}.xhtml" />

感谢。

3 个答案:

答案 0 :(得分:1)

您的解决方案应该正常工作 - src attribute可以是文字或EL表达式。您可能希望使表达式使用托管bean属性或通过function解析它。这样,您可以确保它永远不为null(如果是,您可以返回对空页面的引用)。如果#{r}解析为null,您可能会收到404错误。

<ui:include src="#{myfn:resolveNotNull(r, 'pageIfRIsNull')}.xhtml" />

答案 1 :(得分:0)

不确定。另一种方法是使用带有ui:insert的模板,然后直接使用ui:case以编程方式定义case1或case2。

答案 2 :(得分:0)

可以选择性地使用ui:include与其他JSF组件。例如:

<h:panelGroup rendered="#{!menuMBean.passwordResetRequired}">
    <ui:include src="homeNormal.xhtml" />
</h:panelGroup>