2012-02-04 100 views
1

我已經設置了i18n到我的web應用程序使用Spring.It工作正常。但我有一個問題。當我點擊鏈接到不同的語言,從,讓我們說edit_user頁面。請求URL生成爲'/edit_user.htm?lang=de'.Controller類收到此請求並運行基於@RequestMapping(value = { "edit_user" })的editUser方法。如何避免這種情況發生。我只希望我的網絡應用程序能夠在單擊「更改語言鏈接」時簡單地更改區域設置,而無需到達控制器類方法。我的spring-config-servlet.xml如下。i18n與Spring MVC,跳過RequestMapping

<bean id="messageSource" 
     class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
     <property name="basename" value="classpath:i18n/messages" /> 
     <property name="defaultEncoding" value="UTF-8" /> 
    </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.mvc.annotation.AnnotationMethodHandlerAdapter" /> 
    <bean id="restTemplate" class="org.springframework.web.client.RestTemplate" /> 

    <bean 
     class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
     <property name="order" value="1" /> 
     <property name="mediaTypes"> 
      <map> 
       <entry key="pretty" value="text/html" /> 
       <entry key="json" value="application/json" /> 
       <entry key="xml" value="application/xml" /> 
      </map> 
     </property> 
     <property name="defaultViews"> 
      <list> 
       <bean 
        class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> 
       <bean class="org.springframework.web.servlet.view.xml.MarshallingView"> 
        <constructor-arg> 
         <bean class="org.springframework.oxm.xstream.XStreamMarshaller" /> 
        </constructor-arg> 
       </bean> 
      </list> 
     </property> 
     <property name="ignoreAcceptHeader" value="true" /> 
    </bean> 

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

    <bean 
     class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 
     <property name="exceptionMappings"> 
      .... 
     </property> 
     <property name="defaultErrorView" value="errorPage" /> 
    </bean> 
+0

我的控制器類沒有擴展AbstractController類。這是一個問題。但無論如何,在控制器中指定的@RequestMapping註釋工作正常 – ghTvNath 2012-02-04 11:04:02

回答

2

嗯......有趣。

UserController類接收該請求:

<a href="?lang=en">en</a> | <a href="?lang=de">de</a> 

爲URL http://www.example.com/AppName/User/edit_user.htm?lang=de和運行editUser方法。

但你可以改變你的鏈接:當用戶點擊鏈接到不同的語言HomeController類接收請求/?lang=de,Web應用程序更改地區和重定向用戶到根頁http://www.example.com/AppName/?lang=de

<a href="<c:url value="/?lang=en" />">EN</a> | <a href="<c:url value="/?lang=de" />">DE</a> 

現在。

此行爲是否可以接受您的應用程序?

否則我想你必須過濾所有控制器類的請求參數,如果你想找到另一種解決方案。

+0

有沒有特定的方式可以通過請求參數名稱過濾請求? – ghTvNath 2012-02-04 11:58:28

+0

@ghTvNath其實,我現在還不知道這種情況的另一個解決方案。需要一些調查。 – 2012-02-04 12:20:12