我正在使用 春季2.5JSF 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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top