2

クラスパスからプロパティファイルをロードするf:loadBundleがあります。

<f:loadBundle basename="com.xxx.ui.messages" var="msg" />

後で、次の構文でリソースバンドルからのメッセージを使用しようとしています。

<h:outputText value="test message: #{msg.does_not_exist} --"/>

以前はJSFが「NOTFOUND」メッセージを出力していましたが、現在は例外をスローしています。仕様は変更されましたか、それともこれは正しい動作ですか?

ELリゾルバーとしてJUEL2.2.4でMojarra2.1.9を使用しています。スタックトレースは次のとおりです。

javax.el.PropertyNotFoundException: /WEB-INF/xxx.xhtml @10,70 value="test message: #{msg.does_not_exist} --": Property 'does_not_exist' not found on type java.util.PropertyResourceBundle
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
    at javax.faces.component.UIOutput.getValue(UIOutput.java:169)
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)

編集:正しい動作はここで確認できます:http://javaserverfaces.java.net/nonav/docs/2.0/vdldocs/facelets/f/loadBundle.html

(これは、リテラル文字列??? KEY ???がマップから返されることを意味します。ここで、KEYは、MissingResourceExceptionがスローされるのではなく、マップで検索されるキーです)

編集:JUELを削除した後でも同じ問題

4

1 に答える 1

3

したがって、答えは実際にあなたをじっと見つめていることです...私が正しい道を歩み始めた@millimooseへの小道具。

仕様に次のように記載されていることに注意してください。

リテラル文字列 ???KEY??? Map から返されます。ここで、KEY は、 MissingResourceExceptionがスローされる代わりに、Map で検索されるキーです。

しかし、私のスタック トレースは次のように言っています。

javax.el. PropertyNotFoundException : /WEB-INF/xxx.xhtml @10,70 value="テスト メッセージ: #{msg.does_not_exist} --": タイプ java.util.PropertyResourceBundle でプロパティ 'does_not_exist' が見つかりません

ああ、バグの可能性があります!

このクラスが tomcat/lib からプルされることを知っていたので、ソースと Javadoc を参照しました。「getValue()」のスロー宣言に注目してください。

これは、ここの仕様とはかなり対照的です。

そこで、Tomcat/lib から el-api を削除し、spec jar ( here )に置き換えて、問題を解決しました!

Tomcat が仕様とこれほど異なる理由は、私には理解できません...狂った Apache 連中です。

于 2012-06-15T14:39:14.807 に答える