h:outputText有条件地呈现JSF元素组不再在JSF 2中工作?

时间:2013-11-08 21:34:20

标签: jsf jsf-2 rendered-attribute

我有一些代码使用<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属性的评估结果如何。为什么呢?

1 个答案:

答案 0 :(得分:0)

实际上,自JSF 2.0起,UIInputUIOutput的子项默认不再呈现。这是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>只是作业的错误工具™。