1

ReloadableResourceBundleMessageSource の再読み込み可能な機能を取得し、ロケールごとにプロパティ/すべてのメッセージに一度にアクセスする方法がわかりません。ReloadableResourceBundleMessageSource API は、コードと言語による個々のメッセージ以外へのアクセスを提供しません... ReloadableResourceBundleMessageSource は、メンバーの可視性のため、プロパティにアクセスするように拡張することさえできません。

再読み込み可能なプロパティを持ち、それらに一度にアクセスする方法はありますか?

4

1 に答える 1

1

これをコーディングしたところですが、うまくいくことを願っていますが、最適化する必要があります。メソッドを静的にするか、Bean にする必要がある場合は、基本クラスからベース名とロケールを取得します。

package mx.gob.jgtjo.apps.schedule.web.utils;

import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;

import org.springframework.context.support.ReloadableResourceBundleMessageSource;

public class CustomMessageResolver extends
          ReloadableResourceBundleMessageSource {

     public CustomMessageResolver() {

     }

     public Map<Object, Object> loadAllMessagesByLocale(String basename,
               Locale locale) {

          List<String> fileNames = super
                    .calculateAllFilenames(basename, locale);

          Map<Object, Object> messagesByLocale = new HashMap<Object, Object>();

          for (String fileName : fileNames) {

               PropertiesHolder holder = super.getProperties(fileName);

               for (Entry<Object, Object> entry : holder.getProperties()
                         .entrySet()) {

                    messagesByLocale.put(entry.getKey(), entry.getValue());
               }

          }

          return messagesByLocale;

     }
}

更新:指定されたベース名からすべてのプロパティを取得するより良い方法を見つけました:

public class CustomMessageResolver extends
          ReloadableResourceBundleMessageSource {

     public CustomMessageResolver() {

     }

     public Map<Object, Object> loadAllMessagesByLocale(String basename,
               Locale locale) {

          Map<Object, Object> messagesByLocale = new HashMap<Object, Object>();

          PropertiesHolder holder = super.getMergedProperties(locale);

          for (Entry<Object, Object> entry : holder.getProperties().entrySet()) {

               messagesByLocale.put(entry.getKey(), entry.getValue());
          }

          return messagesByLocale;

     }
}

これにより、基本クラスからベース名が取得されます。

于 2012-10-11T12:35:30.367 に答える