在Spring Framework中访问适当的资源包

时间:2011-02-24 11:32:18

标签: spring spring-mvc spring-webflow

我正在尝试使用Spring框架(WebFlow)访问资源包。 messages.properties文件和相应的messages_ar_AE.properties文件保存在Spring Framework访问资源包的类路径中。

使用JSTL resourceBundle属性从xhtml文件调用的代码。

<myCustom:includedInSetValidator set="5.0, 5.0.1, 5.1" 
                            validationMessage="#{resourceBundle['jboss.version.error']}" />

但无论语言环境如何,"#{resourceBundle['jboss.version.error']}"总是提取默认文本,即;来自英语;

正如我从一些论坛中了解到的,我得到了一个提示,我需要使用LocaleChangeInterceptor或其他一些预定义的类来处理它。一旦设置了Spring Locale,默认情况下将加载正确的资源包,从而解决我的问题。

我需要一种以编程方式更改Spring Framework Locale以设置Locale的方法。我如何以编程方式实现此目的?

感谢。

2 个答案:

答案 0 :(得分:1)

达成了问题的解决方案。

继续我的问题,当Spring Framework默认遇到类似"#{resourceBundle['jboss.version.error']}"的JSTL表达式时,它会在类路径中查找message.properties文件,除非明确定义了资源包。

当尝试获取正确的资源包时,框架会查看它所设置的语言环境。由于我的案例中没有设置Spring Framework的语言环境,因此它没有获取预期的资源包。在可用选项中,我选择了Spring LocaleResolver

我在我的应用程序中修改了现有的JSF Custom ViewHandler,在那里我添加了代码来设置Spring Framework的语言环境。

public Locale calculateLocale(FacesContext arg0) {

HttpServletRequest request  = (HttpServletRequest)arg0.getExternalContext().getRequest();
        HttpServletResponse response  = (HttpServletResponse)arg0.getExternalContext().getResponse();

LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);

localeResolver.setLocale(request, response, **setYourLocaleHere**);

}

这个故事并没有在这里结束,以这种方式在语言环境解析器中设置语言环境会引发错误:

Cannot change HTTP accept header – use a different locale resolution strategy

参考Cannot change HTTP accept header error

要克服这一点,应该包括

<bean id="localeResolver"
        class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
        <property name="defaultLocale" value="en" />
    </bean>

在Spring配置文件中。

现在设置了Spring Framework的所需语言环境。

可能有比我更好的解决方案。如果有的话,也可以建议他们的解决方案。

感谢。

答案 1 :(得分:0)

您可以按照文档中的here概述的多种方式执行此操作。