Вы можете сделать это только с помощью JSF.
Начните с определения управляемого свойства в вашем компоненте поддержки.В конфигурации JSF вы можете установить значение управляемого свойства для выражения EL, которое ссылается на ваш пакет ресурсов.
Я сделал что-то вроде следующего, используя Tomcat 6. Единственное предостережение - вы не можете получить доступэто значение из конструктора вашего компонента поддержки, поскольку JSF еще не инициализировал его.Используйте @PostConstruct
в методе инициализации, если значение необходимо в начале жизненного цикла компонента.
<managed-bean>
...
<managed-property>
<property-name>messages</property-name>
<property-class>java.util.ResourceBundle</property-class>
<value>#{msgs}</value>
</managed-property>
...
</managed-bean>
<application>
...
<resource-bundle>
<base-name>com.example.messages.messages</base-name>
<var>msgs</var>
</resource-bundle>
...
</application>
Это дает преимущество, заключающееся в том, что ваши методы компонента поддержки в меньшей степени зависят от технологии представления, поэтому это должно быть прощетестировать.Он также отделяет ваш код от таких деталей, как имя, данное пакету.
Некоторые тесты с использованием Mojarra 2.0.4-b09 действительно показывают небольшое несоответствие, когда пользователь меняет локаль в середине сеанса.В выражениях EL на странице используется новая локаль, но компоненту поддержки не дается новая ссылка ResourceBundle.Чтобы сделать это согласованным, вы можете использовать значение свойства bean в выражениях EL, например, использовать #{backingBean.messages.greeting}
вместо #{msgs.greeting}
.Тогда страница EL и компонент поддержки всегда будут использовать локаль, которая была активной в начале сеанса.Если бы у пользователей было , чтобы переключать локали в середине сеанса и получать новые сообщения, вы могли бы попытаться создать bean-объект в области запроса и дать ему ссылки как на сессионный компонент, так и на пакет ресурсов.