4

我在Tomcat 6.0.13上使用Spring 2.5JSF 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>
4

2 回答 2

3

伊戈尔B,

您可以使用资源注入让 JSF 为您的托管 bean 提供正确的 ResourceBundle。这将消除对 Java 源代码中的任何内容进行硬编码的需要,并保持关联很好地集中。

首先在您的支持 bean 上定义一个托管属性。在 JSF 配置中,将托管属性的值设置为引用资源包的 EL 表达式。

我已经使用 Tomcat 6 完成了类似以下的操作。唯一需要注意的是,您无法从支持 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>
于 2011-04-07T04:45:26.130 回答
2

getMessageBundle()返回<message-bundle>条目 in的值faces-config.xml,而不是<resource-bundle>条目。

它的值实际上不适用于 JSF 1.2 API。您必须自己指定。

ResourceBundle bundle = context.getApplication().getResourceBundle(context, "org.mysite.MessageBundle");

<message-bundle>用于验证/转换消息。可能您实际上已经在 J​​SF 1.1 中使用过它。

于 2010-12-02T12:07:44.243 回答