【问题标题】:Resolving facelets components at runtime在运行时解析 facelets 组件
【发布时间】:2009-07-20 14:04:11
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: java jsf facelets


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      不确定。一种替代方法是使用带有 ui:insert 的模板,然后直接指向以编程方式使用 ui:define 的 case1 或 case2。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-02
          • 1970-01-01
          • 2017-09-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多