1

Tomcat6とTomcat7に正常にデプロイされるJSF1.2アプリケーションがあります。ここまでは順調ですね。

ページの1つには、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']}

これはTomcat7でも失敗するはずでした。おそらく、かなり古いバージョンのTomcat 7を使用していました。これは、7.0.0から7.0.10の間のどこかで「修正」されました。現在、すでに7.0.28になっています。

于 2012-07-05T18:52:01.657 に答える
3

Expression Language 2.2仕様から:

識別子はJava識別子に制約されます-たとえば、no -、no/など。

protected予約されているため、Javaで識別子として使用することはできません。

この制限はEL2.1にも適用されたため、これまで機能していたのは、古いプラットフォームのELパーサーのバグである可能性があります。

于 2012-07-05T15:58:02.587 に答える
1

「保護された」もJavaの予約語です!「続ける」のように

于 2012-07-05T15:44:15.777 に答える