如何向Spring-JSF应用程序添加资源包



我有一个spring-jsf集成应用程序。当我试图从faces-config.xml的资源包中获取消息时,它运行没有问题。但是我想把这个资源包移动到spring applicationContext.xml,但问题是,它找不到我的资源包。我的faces-config;

    <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">
    <application>
        <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
         <resource-bundle>
                  <base-name>/resources/locale/messages</base-name>
                   <var>msg</var>
         </resource-bundle>
         <locale-config>
                   <default-locale>es</default-locale>
                   <supported-locale>en</supported-locale>
                   <supported-locale>fr</supported-locale>
          </locale-config>
    </application>
</faces-config>    

和my applicationContext.xml

        <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
        <property name="defaultLocale" value="es" />
    </bean>

<bean id="msg"
      class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:messages" />
    <property name="useCodeAsDefaultMessage" value="true" />
    <property name="defaultEncoding" value="UTF-8"/>
    <property name="cacheSeconds" value="1" />
</bean>

看起来<base-name>元素不正确。

<resource-bundle>
  <base-name>Messages</base-name>
  <var>msgs</var>
</resource-bundle>
<locale-config>
  <default-locale>en_US</default-locale>
  <supported-locale>nl</supported-locale>
  <supported-locale>es</supported-locale>
</locale-config>

资源包的基本名称是属性文件的前缀。JSF足够聪明,可以确定区域设置,并从类路径中派生属性文件的正确文件名。

Messages_en_US.properties

Messages_es.properties

上面的摘录显示了默认的语言环境设置为英语,下面列出了其他支持的语言环境。当具有这种首选语言环境的访问者请求JSF页面时,它将足够聪明地从适当命名的资源束中检索属性值。

选自BalusC的资源包教程

<application>
    <locale-config>
        <default-locale>en_US</default-locale>
        <supported-locale>nl</supported-locale>
        <supported-locale>es</supported-locale>
    </locale-config>
    <resource-bundle>
        <base-name>com.example.faces.i18n.Text</base-name>
        <var>text</var>
    </resource-bundle>
</application>

另一种方法是实现你自己的ResourceBundle类。

public class Text extends ResourceBundle {

如何做到这一点的详细说明列在链接的教程。

实现自己的资源束的额外好处是,您可以将其声明为具有Application Scope的Spring bean,并且在需要访问代码中的各种资源束属性时,可以通过DI将其推送到整个应用程序的其他代码中。

相关内容

  • 没有找到相关文章

最新更新