首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring MVC:静态ResourceBundle

Spring MVC:静态ResourceBundle
EN

Stack Overflow用户
提问于 2013-06-27 23:18:57
回答 1查看 1.1K关注 0票数 0

我有很多控制器是扩展了一个基本控制器,它有一个静态构造器与ResourceBundle生成:

代码语言:javascript
复制
static {
   resources = ResourceBundle.getBundle("com.resource.Resources");
}

我需要它,因为应用程序的逻辑是基于区域设置的,而不仅仅是视图。

另外,我有一个从cookie解析当前语言环境的CookieLocaleResolver

问题是基本控制器静态构造函数代码在CookieLocaleResolver的resolveLocale方法之前执行,因此我总是在ResourceBundle处接收系统的默认区域设置,而不是当前的默认区域设置。

我该怎么解决它呢?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-28 02:19:17

这是因为static块是在类初始化时执行的。您需要在调用控制器时加载ResourceBundle。我建议您在这里将控制器定义为prototype,并使用InitializingBean加载ResourceBundle。

代码语言:javascript
复制
public class MyController implements InitializingBean {
    private ResourceBundle resources;

    public void afterPropertiesSet() {
         resources = ResourceBundle.getBundle("com.resource.Resources");
    }
}

更好的方法是使用ResourceBundleMessageSource,而不是直接使用ResourceBundle。如果可以,这会容易得多,因为您不必直接管理ResourceBundle。

我希望这会对你有所帮助。

编辑

Spring MessageSource提供了使用参数解析消息的方法。如果在应用程序中定义了MessageSource,还可以在视图中访问相同的消息(例如JSP页面)。最后,从设计上看,如果控制器没有对资源包的直接引用,这会更好,这样标签/消息就可以在一个地方管理(在声明MessageSource时在Spring config中)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17347049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档