i18消息属性无法通过Controller反映在JSP中 [英] i18 message property does not reflect in JSP through Controller

查看:81
本文介绍了i18消息属性无法通过Controller反映在JSP中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

感谢所有帮助,因为我迷失了所有这些知识,并且JSP不会按照URL参数传递的语言显示spring消息.当在welcome.jsp中选择了其他语言时,JSP无法通过SessionLocaleResolver获取SessionLocale.我在做什么/出错了.

Appreciate any help as I am lost in getting these things together and JSP does not show spring message as per language which is passed in URL argument. JSP is not getting SessionLocale thru SessionLocaleResolver when different language are selected in welcome.jsp. What am I doing/going wrong.

我正在使用Spring 3.1.1.预先感谢

I am using Spring 3.1.1. Thanks in advance

<!-- Configures the @Controller programming model -->
<mvc:annotation-driven />

<!-- Enables the Spring MVC @Controller programming model -->
<mvc:view-controller path="/views/**" view-name="secure/index" />

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

<!-- URL interceptor -->
<bean id="localeChangeInterceptor"
    class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="lang" />
</bean>

<bean id="handlerMapping"
    class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
    <property name="interceptors">
        <ref bean="localeChangeInterceptor" />
    </property>
</bean>

<!-- Application Message Bundle -->
<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:messages" />
</bean>

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>

我的WelcomeController

My WelcomeController

@Controller
public class WelcomeController {

@Autowired
private MessageSource messageSource;

public void setMessageSource(MessageSource messageSource) {
    this.messageSource = messageSource;
}

@RequestMapping(value = "/welcome", method = RequestMethod.GET)
public String welcome(Model model, HttpServletRequest request, HttpServletResponse response) {
    String lang = request.getParameter("lang");
    if (lang == null) {
        lang = "en_US";
    }
    /**
     * Get Message having PARAMETERS in the message {0}, {1}.....{n}
     */
    model.addAttribute(
            "welcome_back_msg",
                messageSource.getMessage("message_welcome_back_user", new Object[] { "(USER)",
                        new DateTime(), new DateTime() }, new Locale(lang)));
    return "welcome";
}
}

消息文件位于/WEB-INF/messages/ messages_en.properties

Message files are placed in /WEB-INF/messages/ messages_en.properties

welcome_springmvc=Welcome to Spring MVC
message_welcome_back_user=Welcome back {0} Your Last Successful : {1} Failed : {2}

messages_zh.properties

messages_zh.properties

welcome_springmvc=\u6B22\u8FCE\u5230 Spring \u7684 MVC

message_welcome_back_user = \ u6B22 \ u8FCE \ u56DE \ u6765 {0} \ u4E0A \ u6B21 \ u6210 \ u529F:{1} \ u5931 \ u8D25:{2}

message_welcome_back_user=\u6B22\u8FCE\u56DE\u6765 {0} \u4E0A\u6B21\u6210\u529F : {1} \u5931\u8D25 : {2}

messages_fr.properties

messages_fr.properties

welcome_springmvc=Bienvenue \u00E0 Spring MVC

message_welcome_back_user = Bienvenue \ u00E0 nouveau {0}投票r \ u00E9ussite Derni \ u00E8re:{1} manqu \ u00E9:{2}

message_welcome_back_user=Bienvenue \u00E0 nouveau {0} Votre r\u00E9ussite Derni\u00E8re : {1} manqu\u00E9 : {2}

--- welcome.jsp

--- welcome.jsp

Spring Message from Property:<b><spring:message code="welcome_springmvc" text="default text" /></b>
Message from Controller:<b>${welcome_back_msg}

JSP图像

您可以看到,来自Property的Spring消息始终回退到locale = zh. 感谢这方面的帮助.

You can see Spring Message from Property always fallsback to locale = en. Appreciate any help in this regards.

推荐答案

仅实例化LocaleChangeInterceptor Bean是不够的.除所有拦截器外,它还必须注册为拦截器:

It is not enough to instanciate a LocaleChangeInterceptor Bean. As well as all Interceptors it must be registered as an Interceptor:

因此将bean def放在<mvc:interceptors>标记内:

So put the bean def within a <mvc:interceptors> tag:

<!-- URL interceptor -->
<mvc:interceptors>
     <bean id="localeChangeInterceptor"
       class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
       <property name="paramName" value="lang" />
     </bean>
</mvc:interceptors> 

顺便说一句:看一下jsp spring消息标记

这篇关于i18消息属性无法通过Controller反映在JSP中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆