我正在搜索一种支持的方式来渲染JSF中的一段代码,我通常使用这种方法:
<ui:fragment rendered="#{condition}">
<h:outputText value="text 1"/>
<h:outputText value="text 2"/>
<h:outputText value="text 3"/>
</ui:fragment>
Run Code Online (Sandbox Code Playgroud)
由于ui:fragment不支持渲染大部分IDE(如netbeans将其标记为错误但是它可以工作,因为在JSF参数中是继承的.
解决此问题的一种方法是使用另一种结构(例如,如果您使用SEAM)
<s:div rendered="#{condition}">
....
</s:div>
Run Code Online (Sandbox Code Playgroud)
另一种方法是在所有内部内容中设置渲染,如下所示:
<h:outputText value="text 1" rendered="#{condition}"/>
<h:outputText value="text 2" rendered="#{condition}"/>
<h:outputText value="text 3" rendered="#{condition}"/>
Run Code Online (Sandbox Code Playgroud)
但我不喜欢这种方式,因为你必须将渲染添加到每个元素.
另一种方法是使用<c:if test="#{condtion}">
BUT c:如果从JSF树中删除元素,而不是你总是想要做的,特别是如果你使用AJAX.
所以你们有另一种解决方案吗?
Bal*_*usC 57
既然
ui:fragment
不支持渲染大部分IDE(比如Netbeans将其标记为错误但是它可以工作,因为在JSF参数中继承)
这实际上是JSF 2.0 Facelets标记文件声明中的一个错误(在Mojarra中,就是com/sun/faces/metadata/taglib/ui.taglib.xml
文件).rendered
标记文件声明(以及JSF 2.0 <ui:fragment>
标记文档中)忽略和遗漏了该属性,而它实际上存在于UIComponent
.IDE验证基于标记文件声明,因此它会产生误导性验证错误.这个问题在JSF 2.1中得到修复,缺少的属性被添加到标记文件声明中(以及JSF 2.1 <ui:fragment>
标记文档中).
如果只是忽略IDE警告或升级到JSF 2.1不是一个选项,那么您可以考虑使用该<h:panelGroup>
组件:
<h:panelGroup rendered="#{condition}">
<h:outputText value="text 1"/>
<h:outputText value="text 2"/>
<h:outputText value="text 3"/>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
如果你不指定它反正什么也不输出id
,style
,styleClass
和类似的属性,否则简单的<span>
将被渲染.
如果您拥有的只是普通的HTML(即没有JSF组件),那么您也可以考虑使用<f:verbatim>
.
<f:verbatim rendered="#{condition}">
text 1
text 2
text 3
</f:verbatim>
Run Code Online (Sandbox Code Playgroud)
然而,<f:verbatim>
被弃用的JSF 2.0(这反过来也对了一部纪录片的bug,在JSF 2.0 <f:verbatim>
标签文件没有提到折旧,但JSF 2.1 <f:verbatim>
标签文档一样).
归档时间: |
|
查看次数: |
33788 次 |
最近记录: |