0

如何在 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 文件中?

4

2 回答 2

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;
    }
于 2013-10-07T07:14:00.297 回答
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;
}

不过这有点笨拙。作为替代方案,您可以定义一个执行上述转换的包装类,并将其连接为一个 bean。然后将您的课程挂接到该 bean。

于 2013-10-07T07:41:28.300 回答