java – 在JSF中替代ui:fragment - 代码日志

java – 在JSF中替代ui:fragment

我正在搜索支持的方式在JSF中呈现一段代码,我通常使用这种方法:

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

因为ui:片段不支持渲染大部分的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}"/>

但我不喜欢这样,因为你必须添加渲染到每个元素。

另一种方式是使用< c:if test =“#{condtion}”>但是c:如果从JSF树中删除元素,而不是你一直想要使用AJAX的东西。

那么你们有另一个解决方案吗?

Since ui:fragment doesn’t support rendered most of IDE (like Netbeans mark it as error BUT it works because in JSF parameters are inherited)

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

如果只是忽略IDE警告或升级到JSF 2.1不是一个选项,那么可以考虑使用the <h:panelGroup> component

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

如果您没有指定id,style,styleClass和like属性,它不会输出任何内容,否则简单的< span>将被呈现。

如果你所有的都是纯朴的HTML(即没有JSF组件),那么你也可以考虑使用< f:verbatim&gt ;.

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

但是,< f:verbatim>在JSF 2.0(反过来也有一个纪录错误的方式,JSF 2.0 <f:verbatim> tag documentation没有提及弃用,但JSF 2.1 <f:verbatim> tag documentation)已经弃用了。

http://stackoverflow.com/questions/3713468/alternative-to-uifragment-in-jsf

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 在JSF中替代ui:fragment