【问题标题】:Alternative to ui:fragment in JSFJSF 中 ui:fragment 的替代方案
【发布时间】:2011-04-12 10:11:35
【问题描述】:

我正在寻找一种支持的方式来在 JSF 中渲染一段代码,我通常使用这种方法:

<ui:fragment rendered="#{condition}">
   <h:outputText value="text 1"/>
   <h:outputText value="text 2"/>
   <h:outputText value="text 3"/>
</ui:fragment>

由于 ui:fragment 不支持大多数 IDE 的渲染(如 netbeans 将其标记为错误但它可以工作,因为在 JSF 中参数是继承的。

解决这个问题的一种方法是使用另一种结构(例如,如果您使用 SEAM),您可以使用

<s:div rendered="#{condition}">
   ....
</s:div>

另一种方法是在所有内部内容中设置渲染,如下所示:

<h:outputText value="text 1" rendered="#{condition}"/>
<h:outputText value="text 2" rendered="#{condition}"/>
<h:outputText value="text 3" rendered="#{condition}"/>

但我不喜欢这种方式,因为您必须将渲染添加到每个元素。

另一种方法是使用&lt;c:if test="#{condtion}"&gt; BUT c:if 从 JSF 树中删除元素,这不是您一直想做的事情,尤其是在使用 AJAX 时。

那么你们还有其他解决方案吗?

【问题讨论】:

    标签: java jsf


    【解决方案1】:

    由于 ui:fragment 不支持大多数 IDE 的渲染(如 Netbeans 将其标记为错误但它可以工作,因为在 JSF 中参数是继承的)

    这实际上是 JSF 2.0 Facelets 标记文件声明中的一个错误(在 Mojarra 中,即 com/sun/faces/metadata/taglib/ui.taglib.xml 文件)。 rendered 属性在标记文件声明(以及JSF 2.0 &lt;ui:fragment&gt; tag documentation)中被忽略和缺失,而它确实存在于UIComponent 中。 IDE 验证基于标记文件声明,因此会产生误导性验证错误。这个问题在 JSF 2.1 中得到修复,缺少的属性被添加到标记文件声明中(也在 JSF 2.1 &lt;ui:fragment&gt; tag documentation 中)。

    如果忽略 IDE 警告或升级到 JSF 2.1 不是一个选项,那么您可以考虑使用 the &lt;h:panelGroup&gt; component 代替:

    <h:panelGroup rendered="#{condition}">
       <h:outputText value="text 1"/>
       <h:outputText value="text 2"/>
       <h:outputText value="text 3"/>
    </h:panelGroup>
    

    如果您不指定idstylestyleClass 等属性,它不会输出任何内容,否则将呈现一个简单的&lt;span&gt;

    如果您拥有的只是普通的 HTML(即没有 JSF 组件),那么您也可以考虑使用 &lt;f:verbatim&gt;

    <f:verbatim rendered="#{condition}">
       text 1
       text 2
       text 3
    </f:verbatim>
    

    但是,&lt;f:verbatim&gt; 在 JSF 2.0 中被弃用(顺便说一下,这也有一个文档错误,JSF 2.0 &lt;f:verbatim&gt; tag documentation 没有提及弃用,但 JSF 2.1 &lt;f:verbatim&gt; tag documentation 确实如此) .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 2013-01-07
      • 1970-01-01
      • 2011-08-26
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多