2013-06-26 36 views
0

我已經建立了我的Spring MVC項目的i18n。在Spring MVC 3本地沒有變化,當點擊本地更改鏈接

<a href="?lang=hi">Hindi</a> 
<a href="?lang=en">English</a> 

控制器servlet.xml中

<mvc:annotation-driven/> 
    <context:component-scan base-package="com.avvas.search.controller" /> 

    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> 

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

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

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

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

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

    <mvc:resources mapping="/css/**" location="/css/" /> 
    <mvc:resources mapping="/javascript/**" location="/javascript/" /> 

局部變化鏈接:當我點擊鏈接的語言沒有改變

<a href="?lang=hi">Hindi</a> 
<a href="?lang=en">English</a> 

的問題是,當我點擊印地文的頁面應該用印地文語言顯示,語言沒有變化。然而,我改變默認語言印地文<property name="defaultLocale" value="hi"/>然後它採取本地作爲印地文,但當我點擊英文本地變化鏈接本地沒有得到改變。

回答

2

<mvc:annotation-driven/>正在註冊自己的處理程序映射(RequestMappingHandlerMapping),並且您的攔截器配置不適用於此。

定義你的攔截器是這樣的:

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

下面是完整的代碼。基本上我們需要明確註冊我們的攔截器。

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

在上面給出的xml你給「localeChangeInterceptor」但你沒有提及任何地方,它應該攔截在默認情況下所有的請求。

因此,Spring將加載所有的bean,但它不會將其註冊爲攔截器,除非您定義了應攔截的請求。

在下面的示例中,我將其定義在mvc攔截器中,並告訴框架它應該在處理任何請求之前諮詢該攔截器。

<mvc:interceptor> 
     <mvc:mapping path="/**/**/" /> 
     <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
      <property name="paramName" value="locale" /> 
     </bean> 
    </mvc:interceptor> 
</mvc:interceptors>