1

你知道在运行时选择不同的 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" />

谢谢。

4

3 回答 3

1

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

<ui:include src="#{myfn:resolveNotNull(r, 'pageIfRIsNull')}.xhtml" />
于 2009-07-20T14:40:48.677 回答
0

没有把握。另一种方法是使用带有 ui:insert 的模板,然后直接指向以编程方式使用 ui:define 的 case1 或 case2。

于 2009-07-20T14:07:44.607 回答
0

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

<h:panelGroup rendered="#{!menuMBean.passwordResetRequired}">
    <ui:include src="homeNormal.xhtml" />
</h:panelGroup>
于 2009-07-23T02:34:36.220 回答