JSF 1.2 Application.getMessageBundle()返回null
-
30-09-2019 - |
题
我正在使用 春季2.5 和 JSF 1.2, , 在 TOMCAT 6.0.13.
在代码的一部分中,我正在尝试加载 ResourceBundle 通过使用以下方法:
ResourceBundle.getBundle(context.getApplication().getMessageBundle(), Locale.EN);
问题是 getMessageBundle() 方法返回 空值. 。这曾与 JSF 1.1. 。有人知道会有什么问题?
现在我要使用硬码捆绑套件,但是我希望如果我所有的配置数据都放在里面 面孔.
资源捆绑包如下所:
<application>
<locale-config>
<default-locale>en</default-locale>
</locale-config>
<resource-bundle>
<base-name>org.mysite.MessageBundle</base-name>
<var>msgs</var>
</resource-bundle>
</application>
解决方案
这 getMessageBundle()
返回的价值 <message-bundle>
进入 faces-config.xml
, ,不是 <resource-bundle>
入口。
实际上,JSF 1.2 API不可避免其值。您必须自己指定。
ResourceBundle bundle = context.getApplication().getResourceBundle(context, "org.mysite.MessageBundle");
这 <message-bundle>
用于验证/转换消息。可能你 实际上 在JSF 1.1中使用了它。
其他提示
伊戈布,
您可能可以使用资源注入使JSF为您的托管Bean提供正确的资源键。这将消除在Java源中对任何内容进行硬编码的需求,并保持关联很好地集中。
首先定义背景豆上的托管属性。在JSF配置中,将托管属性的值设置为引用您的资源捆绑包的EL表达式。
我已经使用了Tomcat 6进行了类似以下操作的操作。唯一的警告是您无法从Backing Bean的构造函数访问此值,因为JSF尚未将其初始化。采用 @PostConstruct
在初始化方法上,如果在Bean的生命周期中需要该值。
<managed-bean>
...
<managed-property>
<property-name>messages</property-name>
<property-class>java.util.ResourceBundle</property-class>
<value>#{msg}</value>
</managed-property>
...
</managed-bean>
<application>
...
<resource-bundle>
<base-name>application_messages</base-name>
<var>msg</var>
</resource-bundle>
...
</application>
不隶属于 StackOverflow