0

我有一些代码用于<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 起作用,但它们不再对新 glassfish 起作用 - 它们被替换为空,无论rendered属性评估为什么。为什么?

4

1 回答 1

0

实际上,从 JSF 2.0 开始,默认情况下不再呈现UIInput和的子级。UIOutput这是问题 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 发行说明

然而,更推荐使用<h:panelGroup><ui:fragment>用于块的条件渲染,因为这<h:outputText>只是该工作的错误工具™。

于 2013-11-09T12:33:06.620 回答