在弹簧中动态访问属性文件

时间:2012-11-07 06:41:22

标签: spring-mvc

我们正在我的表示层使用带有JSON的Spring MVC开发一个java Web应用程序。 为了在JSP中显示UI标签而不是硬编码,我们从属性文件中获取它,在JSP表示我们使用 spring:message 标记。我们正在使用 ResourceBundleMessageSource 来实现这一点。这很好。

但是我们的应用程序将从各个区域访问,并且基于我们具有需要使用的UI标签的不同属性文件的区域。所有属性文件中的键都相同,只是值不同。

例如:假设有2个请求'Region1'&用户访问应用程序的'Region2',我有2个属性文件,例如message_region1.properties& message_region2.properties。现在,当用户从Region1登录时,我需要选择message_Region1.properties,如果用户从“Region2”登录,我需要选择message_Region2.properties并显示UI标签。由于两个属性中的所有键都相同,因此我的jsp文件中不会有任何更改。

有任何建议如何实现它?

1 个答案:

答案 0 :(得分:0)

简单:) 创建message_region1.propertiesmessage_region2.properties个文件。 Spring根据客户端的语言环境选择适当的属性文件(使用Default LocaleResolver)。属性文件通常采用filename_<language>_<country>.properties

格式

如果你想告诉Spring,应该如何解决语言环境,请使用spring documentation中给出的4种方法之一

修改

要动态更改属性文件,请使用以下方法之一;我不知道它们是否比4种方法更好(在上面的规范中提到)。

  1. 在返回视图之前,将语言环境更改为已登录用户的“唯一代码”,如下所示。

    RequestContextUtils.getLocale(request).setDefault(new Locale("your code"));
    
  2. 将spring config中的消息源更改为ReloadableResourceBundleMessageSource

    <bean id="messageSource"
     class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:messages" />
        <property name="defaultEncoding" value="UTF-8" />
    </bean>
    

    在返回视图之前,在控制器中重置属性文件名,如下所示:

    messageSource.setBasename("classpath:messages" + your code);