我有一些代码使用<h:outputText>
来有条件地呈现JSF元素组。例子:
<h:outputText rendered="#{authorization.admin}">
<h:outputText value="#{msgs.someinfo}" />
<h:inputSecret value="#{usermanager.password}" />
</h:outputText>
<h:outputText rendered="#{contactmanager.editAction}">
<li>
<label for="name"><h:outputText value="#{msgs.nameinfo}" /></label>
<h:inputText id="name" value="#{contactmanager.name}" />
<h:messages for="name" />
</li>
</h:outputText>
代码在glassfish 2.1.1上,jsf-impl.jar中的MANIFEST.MF看起来像这样(我不确定它是否真的使用这个jar或其他一些用于JSF):
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 1.5.0_19-b02 (Sun Microsystems Inc.)
Specification-Title: JavaServer Faces
Specification-Version: 1.2MR2
Implementation-Title: Mojarra
Implementation-Version: 1.2_13-b01-FCS
Implementation-Vendor: Sun Microsystems, Inc.
Implementation-Vendor-Id: com.sun
Extension-Name: com.sun.faces
我正在尝试使用某些版本的JSF 2或更高版本的glassfish 4。
这个构造的所有数百个实例都在旧的glassfish上运行,但它们不再适用于新的 - 它们被替换为什么,无论rendered
属性的评估结果如何。为什么呢?
答案 0 :(得分:0)
实际上,自JSF 2.0起,UIInput
和UIOutput
的子项默认不再呈现。这是issue 1154修复的结果。在Mojarra 2.x中,您仍然可以通过web.xml
上下文参数将其重新打开:
<context-param>
<param-name>com.sun.faces.allowTextChildren</param-name>
<param-name>true</param-name>
</context-param>
另请参阅Mojarra 2.0.0 release notes。
然而,建议更多地使用<h:panelGroup>
或<ui:fragment>
进行块的条件渲染,因为<h:outputText>
只是作业的错误工具™。