2013-10-07 59 views
0

如何在Spring XML中配置java.util.Locale的列表?spring - 如何在Spring XML中設置java.util.Locale的列表?

這是我嘗試過(這顯然沒有工作..): -

<bean 
    class="x.y.z.CommandBean" 
    scope="prototype"> 
    <property name="locales"> 
     <list value-type="java.util.Locale"> 
      <value>Locale.US</value> 
      <value>Locale.FR</value> 
     </list> 
    </property> 
</bean> 

例外: -

org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.util.Locale'; 

此外,有沒有什麼辦法可以移動的語言環境.properties文件中的逗號分隔值?

+1

您是否嘗試將值設爲'java.util.Locale.US','java.util.Locale.FR'? – eis

回答

1

指定值

<value>java.util.Locale.US</value> 
<value>java.util.Locale.FR</value> 

應該做的伎倆。從屬性值中獲取它們似乎有點多。

你可以像

my.app.locales=en_US,de_DE 

配置

<bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location"> 
     <value>file:./config.properties</value> 
    </property> 
</bean> 
<bean 
    class="x.y.z.CommandBean" 
    scope="prototype"> 
    <property name="locales"> 
     <bean class="org.springframework.util.StringUtils" factory-method="tokenizeToStringArray"> 
      <constructor-arg type="java.lang.String" value="${my.app.locales}"/> 
      <constructor-arg type="java.lang.String" value=","/> 
     </bean> 
    </property> 
</bean> 

指定它們,那麼你就需要

import org.apache.commons.lang3.LocaleUtils; 

public void setLocales(String[] localeStrings) { 
    List<Locale> locales = new ArrayList<Locale>(localeStrings.length); 
    for (String localeName: Arrays.asList(localeStrings)) { 
     locales.add(LocaleUtils.toLocale(localeName)); 
    } 
    this.locales = locales; 
} 

這有點gludgy雖然。作爲替代方案,您可以定義一個包裝類來完成上面的轉換,並將其作爲一個bean進行連接。然後把你的類掛到那個bean上。

+0

StringUtils方法將解決我的目的。謝謝 。 –

4

試試這個,

<property name="locales"> 
     <list value-type="java.util.Locale"> 
      <value>java.util.Locale.US</value> 
      <value>java.util.Locale.FR</value> 
     </list> 
    </property> 

在你的類,

private List<Locale> locales; 

    public List<Locale> getLocales() { 
     return locales; 
    } 


    public void setLocales(List<Locale> locales) { 
     this.locales = locales; 
    } 
+0

這工作。也可以使用: - \t

相關問題