我有一个 f:loadBundle 从我的类路径加载一个属性文件。
<f:loadBundle basename="com.xxx.ui.messages" var="msg" />
稍后,我尝试使用来自资源包的消息,语法如下:
<h:outputText value="test message: #{msg.does_not_exist} --"/>
过去 JSF 会打印出“NOT FOUND”消息,但现在它抛出异常。规范是否发生了变化,或者这是正确的行为?
我使用 Mojarra 2.1.9 和 JUEL 2.2.4 作为 EL 解析器。这是堆栈跟踪:
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??? 从 Map 返回,其中 KEY 是在 Map 中查找的键,而不是抛出 MissingResourceException)
编辑:即使在删除 JUEL 后也会出现同样的问题