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 回答