1

我有一个 JSF1.2 应用程序,它可以很好地部署在 Tomcat6 和 Tomcat7 上。到目前为止,一切都很好。

其中一页在 ah:inputText 上包含以下属性:

 disabled="#{quoteFinance.quoteSaved or quoteRequest.quoteDisabled or setting.protected}"

这在上述 Tomcat 服务器上验证并正常工作。但是,websphere8 认为这是一个问题并抛出以下错误:

 disabled="#{quoteFinance.quoteSaved or quoteRequest.quoteDisabled or setting.protected}" [protected] is not a valid Java identifier
at com.sun.facelets.tag.TagAttribute.getValueExpression(TagAttribute.java:259)
at com.sun.facelets.tag.jsf.ComponentRule$ValueExpressionMetadata.applyMetadata(ComponentRule.java:69)
at com.sun.facelets.tag.MetadataImpl.applyMetadata(MetadataImpl.java:36)
at com.sun.facelets.tag.MetaTagHandler.setAttributes(MetaTagHandler.java:76)

Cause:
javax.el.ELException: [protected] is not a valid Java identifier
at org.apache.el.parser.AstDotSuffix.setImage(AstDotSuffix.java:45)
at org.apache.el.parser.ELParser.DotSuffix(ELParser.java:1067)
at org.apache.el.parser.ELParser.ValueSuffix(ELParser.java:1033)
at org.apache.el.parser.ELParser.Value(ELParser.java:978)
at org.apache.el.parser.ELParser.Unary(ELParser.java:948)
at org.apache.el.parser.ELParser.Multiplication(ELParser.java:712)
at org.apache.el.parser.ELParser.Math(ELParser.java:632)
at org.apache.el.parser.ELParser.Compare(ELParser.java:444)
at org.apache.el.parser.ELParser.Equality(ELParser.java:338)
at org.apache.el.parser.ELParser.And(ELParser.java:282)

我有一个类似的问题,#{msg.continue}这很好,但是因为 continue 是一个保留字,WAS8 给我一个错误。

  • 为什么 websphere 在代码运行良好时不接受这一点?
  • 我该如何解决这个问题?

非常感谢!

4

3 回答 3

4

此行为符合EL 规范。您需要将属性名称重命名为不是 Java 文字的名称,或者您需要使用大括号表示法,以便可以将其引用为String.

#{setting['protected']}

#{msg['continue']}

这在 Tomcat 7 中也应该失败,也许您使用的是相当旧的 Tomcat 7 版本。这已在 7.0.0 和 7.0.10 之间的某个地方“修复”。目前已经是 7.0.28。

于 2012-07-05T18:52:01.657 回答
3

来自表达式语言 2.2规范:

标识符被限制为 Java 标识符 - 例如 no -、 no/等。

protected不能用作 Java 中的标识符,因为它是保留的。

这个限制也适用于 EL 2.1,所以它很可能是旧平台的 EL 解析器中的一个错误,它曾经有效。

于 2012-07-05T15:58:02.587 回答
1

“protected”也是一个java保留字!就像“继续”

于 2012-07-05T15:44:15.777 回答