编程刷新Spring MVC资源包。

4

ResourceBundleMessageSource消息源在Spring配置文件中配置为:

<bean id="messageSource"
  class="org.springframework.context.support.ResourceBundleMessageSource"
  p:basenames="WEB-INF/strings/appstrings" />

每当我更改属性文件中的任何消息时,都必须重新启动服务器。
我想在不重新启动服务器的情况下,在我的应用程序中以编程方式读取这些更新的消息。
在运行应用程序时,我该如何在我的一个@Controller中以编程方式读取这些消息。
2个回答


0

在applicationContext.xml文件中定义您的ResourceBundle属性,例如:

<!-- Message Source for appstrings -->
<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="WEB-INF/strings/appstrings" />

</bean>

在你的Java类/控制器中自动装配它为: private ReloadableResourceBundleMessageSource messageSource;
  @Autowired
  public void setMessageSource(MessageSource messageSource) {
    this.messageSource = (ReloadableResourceBundleMessageSource) ((DelegatingMessageSource) messageSource).getParentMessageSource();
  }

然后在该类/控制器中的任何函数中调用 clearCache()。
messageSource.clearCache();

我在控制器中遇到了这个异常

ReloadableResourceBundleMessageSource incompatible with org.springframework.context.support.DelegatingMessageSource

当您尝试通过控制器中的messageSource运行它时,您会得到NOTHING,即空字符串。如果您仔细查看,您会发现在您的messageSource属性中有一个DelegatingMessageSource,并且其父源为空,这意味着它是EMPTY,即始终返回空白。

这里是解决这个小挑战的方法:将您的messageSource定义从spring-servlet.xml移动到applicationContext.xml!

阅读更多..


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接