JSF 1.2 Application.getMessageBundle () возвращает ноль - PullRequest
4 голосов
/ 02 декабря 2010

Я использую Spring 2.5 с JSF 1.2 , Tomcat 6.0.13 .

В одной части кода я пытаюсь загрузить ResourceBundle , используя следующий подход:

ResourceBundle.getBundle(context.getApplication().getMessageBundle(), Locale.EN);

Проблема в том, что getMessageBundle () метод возвращает ноль .Раньше это работало с JSF 1.1 .Кто-нибудь знает, в чем может быть проблема?

Пока я собираюсь указать имя пакета в жестком коде, но я бы предпочел, чтобы все мои данные конфигурации были помещены в face-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 ]

3 голосов
/ 07 апреля 2011

IgorB,

Вы можете использовать внедрение ресурсов, чтобы JSF предоставил вашему управляемому бину правильный ResourceBundle.Это избавит от необходимости жестко кодировать что-либо в вашем исходном коде Java и поддерживать централизованную ассоциацию.

Начните с определения управляемого свойства в вашем компоненте поддержки.В конфигурации JSF задайте значение управляемого свойства для выражения EL, которое ссылается на ваш пакет ресурсов.

Я сделал что-то вроде следующего, используя Tomcat 6. Единственное предостережение - вы не можете получить доступ к этому значениюиз конструктора вашего компонента поддержки, поскольку JSF еще не инициализировал его.Используйте @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>
2 голосов
/ 02 декабря 2010

getMessageBundle() возвращает значение записи <message-bundle> в faces-config.xml, а не записи <resource-bundle>.

Его значение на самом деле недоступно API JSF 1.2. Вы должны указать это сами.

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

<message-bundle> - для сообщений проверки / преобразования. Возможно, вы на самом деле использовали это в JSF 1.1.

...