Spring MVC默认的Locale和Locale更改不起作用

时间:2014-10-26 14:12:49

标签: java spring jsp maven spring-mvc

我是一名新的Spring开发人员,他试图开发支持两​​种语言的示例Web应用程序。我想将默认语言环境设置为阿拉伯语,并在用户在JSP页面中单击所需语言时更改语言环境。

这是我的mvc-dispatcher-servlet.xml,

<!-- Enables the Spring MVC @Controller programming model -->
<mvc:annotation-driven/>

<!-- Handles HTTP GET requests for /resources/** by efficiently serving 
    up static resources in the ${webappRoot}/resources directory -->
<mvc:resources mapping="/resources/**" location="/resources/" />
<context:component-scan base-package="com.benchmark.ushers.presentation.controller"/>

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

<!-- resource bundle  configuration-->
<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:locale/messages" />
    <property name="fallbackToSystemLocale" value="false"/>
    <property name="defaultEncoding" value="UTF-8"/>
</bean>

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

<mvc:interceptors>  
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
          <property name="paramName" value="lang"></property>
    </bean>
</mvc:interceptors>
<!-- end of resource bundle  configuration-->

我的JSP页面如下,

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<tiles:insertDefinition name="defaultTemplate">
	<tiles:putAttribute name="body">



		<div class="body">
			<h1>Ushers</h1>

			lang : <a href="?lang=en">English</a> | <a
				href="?lang=ar">Arabic</a>

			<h3>
				welcome.springmvc :
				<spring:message code="footer.content" text="default text" />
			</h3>
			
			<h3>
				hello :
				<spring:message code="footer.hello" text="default text" />
			</h3>


		</div>



	</tiles:putAttribute>
</tiles:insertDefinition>

我不知道我的代码有什么问题,而只显示英文文本。

3 个答案:

答案 0 :(得分:1)

问题中的上述配置是正确的。问题是在请求的页面集中作为web.xml文件中的欢迎页面,因此它在没有任何拦截器的情况下执行。

在web.xml中评论此部分后,每件事情都可以正常工作

<!--  <welcome-file-list>
		<welcome-file>/WEB-INF/pages/adminHome.jsp</welcome-file>
</welcome-file-list>-->

答案 1 :(得分:0)

我猜你需要DefaultAnnotationHandlerMapping与@RequestMapping进行映射,它会检查是否有任何语言环境更改请求。另请参阅Spring Internationalization

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

请阅读此topic以避免将其与<mvc:annotation-driven/>

混合使用

答案 2 :(得分:0)

在我的情况下,我使用的是java配置版本,直到我添加&#34; localeResolver&#34;它才开始工作。豆名。我创建的国际化bean如下所示。您可以通过更改URL中的lang参数来检查它是否有效:/some-page.do?lang=ro

<ui-select-choices repeat="f in ['0','1','2','3','4','5','6','7','8','9','10']">