JSF 1.2 Application.getMessageBundle()返回null

时间:2010-12-02 12:03:50

标签: jsf resourcebundle

我在 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>

2 个答案:

答案 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中使用过它。