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 に答える