簡體   English   中英

如何將資源包添加到Spring-JSF應用程序

[英]How to add resource-bundle to Spring-JSF application

我有一個spring-jsf集成應用程序。 當我嘗試從faces-config.xml的resource-bundle獲取消息時,它運行沒有問題。 但我想將此資源包移動到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>    

和我的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可以將其推送到整個應用程序中的其他代碼,以防您需要訪問代碼中的各種資源包屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM