我在 Tomcat 6.0.13 上使用 Spring 2.5 和 JSF 1.2 。
在代码的一部分中,我尝试使用以下方法加载 ResourceBundle :
ResourceBundle.getBundle(context.getApplication().getMessageBundle(), Locale.EN);
问题是 getMessageBundle()方法返回 null 。这曾经用于 JSF 1.1 。 有没有人知道可能是什么问题?
现在我要对软件包名称进行硬编码,但我更愿意将所有配置数据放在 faces-config 中。
资源包设置如下:
<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>
答案 0 :(得分:3)
IgorB,
您可以使用资源注入让JSF为您的托管bean提供正确的ResourceBundle。这样就不需要对Java源代码中的任何内容进行硬编码,并使关联保持良好的集中化。
首先在您的辅助bean上定义托管属性。在JSF配置中,将托管属性的值设置为引用资源包的EL表达式。
我使用Tomcat 6完成了类似下面的操作。唯一需要注意的是,您无法从支持bean的构造函数中访问此值,因为JSF尚未初始化它。如果在bean的生命周期的早期需要值,则在初始化方法上使用@PostConstruct
。
<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>
答案 1 :(得分:2)
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中使用过它。