3

3つの異なるステータスタイプを含む列挙型があります。これらのステータスは、ユーザーに送信される電子メールに表示する必要があり、表示されるステータスを含む文字列は、messages.propertiesに格納されます(Springクラスorg.springframework.context.MessageSourceの実装を使用して読み取ります)。これは通常のSpringコントローラーでうまく機能します。ただし、列挙型内の「表示ステータス」を取得することをお勧めします(ロジックを1か所に含めるため)。

ただし、me​​ssageSourceプロパティは常に空であるため、次のコードのようにメッセージソースを列挙型に自動配線することは機能していないようです。


public enum InitechStatus{
        OPEN("open"), CLOSED("closed"), BROKEN("broken");

        public final String name;
        @Autowired
        private MessageSource messageSource;

        InitechStatus(String name) {
            this.name = name;
        }

        @Override
        public String toString() {

            String displayStatusString = messageSource.getMessage("page.systemadministration.broadcastmail.status."
                    + this.name, null, Locale.ENGLISH);
            return displayStatusString;
        }


    }

列挙型内で自動配線されたメッセージソースを使用するにはどうすればよいですか(または、私が試していることを達成するための他の方法はありますか)?

4

1 に答える 1

8

SOでこの回答から解決策を見つけました:SpringIoCを使用して列挙値を設定する

これにより、次のようにjava.util.ResourceBundleを使用してメッセージを読み取るためのポインターが得られました。


public enum InitechStatus{
        OPEN("open"), CLOSED("closed"), BROKEN("broken");

        private static ResourceBundle resourceBundle = ResourceBundle.getBundle("messages",
                Locale.ENGLISH);

        public final String name;
        @Autowired
        private MessageSource messageSource;

        InitechStatus(String name) {
            this.name = name;
        }

        @Override
        public String toString() {

            String displayStatusString = resourceBundle.getString("page.systemadministration.broadcastmail.status."
                    + this.name);
            return displayStatusString;
        }


    }

于 2010-02-02T10:55:06.463 に答える