5

Spring で MessageSource を使用してテキスト メッセージを挿入しようとしています。私が書いたプログラムは正常にコンパイルされますが、.properties ファイルから適切な値を取得する代わりに、常にデフォルト メッセージを出力します。私にはまったく手がかりがありません。

テキストを挿入しようとする Circle クラスは次のとおりです。

 @Component
    public class Circle implements Shape {

        @Resource
        private Point center;
        @Autowired
        private MessageSource messageSource;

        public MessageSource getMessageSource() {
            return messageSource;
        }

        public void setMessageSource(MessageSource messageSource) {
            this.messageSource = messageSource;
        }

        public Point getCenter() {
            return center;
        }

        public void setCenter(Point center) {
            this.center = center;
        }

        @Override
        public void draw() {
            System.out.println(this.messageSource.getMessage("greeting", null, "Default Greeting", null));
            System.out.println(this.messageSource.getMessage("draw.circle", new Object[] {center.getX(), center.getY()}, "Required Drawing", null));

        }

そして、これが Bean 構成ファイルの一部です。

...
    <bean id="center" class="java.awt.Point">
        <constructor-arg value="0" />
        <constructor-arg value="-20" />
    </bean>

    <bean id="messageSourse" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename">
                <value>messages</value>
        </property>
    </bean>

    <context:component-scan base-package="com.myproject.spring"/>

    <context:annotation-config/>

そして、メッセージと draw.circle を messages.properties ファイルに保存し、メイン クラスを作成しました。しかし、出力は常に次のとおりです。

Default Greeting  
Required Drawing

私の場合、何がうまくいかないのか誰か知っていますか?

更新 アドバイスありがとうございます。私はデバッグしていましたが、ここで何か問題が発生したようです:

public String getMessage(String code, Object[] args, String defaultMessage, Locale locale) {
        if (this.parentMessageSource != null) {
            return this.parentMessageSource.getMessage(code, args, defaultMessage, locale);
        }
        else {
            return renderDefaultMessage(defaultMessage, args, locale);
        }
    }

this.parentMessageSource は null であるため、デフォルト メッセージをレンダリングすることにしました。しかし、私はまだparentMesssageSourceとは何か、そしてそれがどのようにnullになる(ではない)のかをよく理解していませんか?

4

4 に答える 4

3

id="messageSour s e"の代わりにid=" messageSource"を使用する必要があります。Java構成を使用するすべての場合、メソッド名として「messageSource()」が必要です

    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource resourceBundleMessageSource =
                new ResourceBundleMessageSource();
        resourceBundleMessageSource.setBasename(I18_PATH_TEMPLATE + "email_welcome");
        resourceBundleMessageSource.setDefaultEncoding("UTF-8");
        return resourceBundleMessageSource;
    }
于 2015-07-20T01:15:43.137 に答える
1

おそらく、messageSource はメッセージ ファイルを選択できません。ResourceBundleMessageSource にはtoString()、messageResource 構成を表示するメソッドがオーバーライドされています。一度使ってみてください。また、messageSourceオブジェクトが注入された直後にデバッグ ツールを使用して検査し、すべてのプロパティが正常に読み込まれたかどうかを確認することもできます。

于 2012-11-08T03:31:09.943 に答える
1

Bean ID のスペルが間違っています

「 messageSource 」の代わりに「messageSourse」と書きました。

Message Resource Bean の ID が必要で、常に「messageSource」である必要があります。

于 2016-01-10T01:28:00.930 に答える
0

プロパティ ファイルの拡張子は .properties にする必要があります。

于 2016-10-30T13:24:48.150 に答える