2012-02-04 18 views
1

私はSpringを使用して私のWebアプリケーションにi18nを設定しました。しかし、私は問題があります。私は別の言語へのリンクをクリックすると、edit_userページを言うことができます。リクエストURLは '/edit_user.htm?lang=de'として生成されます.Controllerクラスはこのリクエストを受け取り、@RequestMapping(value = { "edit_user" })に基づいてeditUserメソッドを実行します。これを避けるにはどうすればいいですか?私は、単に "言語リンクを変更する"をクリックしたときにコントローラクラスのメソッドに到達せずにロケールを変更できるようにしたいと思っています。私のspring-config-servlet.xmlは以下の通りです。i18n with 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

答えて

2

hm ...興味深い。 URL http://www.example.com/AppName/User/edit_user.htm?lang=deため

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

とeditUserメソッドを実行します。

UserControllerクラスは、この要求を受信します。

しかし、あなたはにあなたのリンクを変更することができます異なる言語HomeControllerクラスへのユーザクリックリンクはウェブアプリは、ロケールを変更し、ルートページhttp://www.example.com/AppName/?lang=deにユーザーをリダイレクトし、/?lang=de要求受信したときに、今

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

と。

この動作はアプリケーションで受け入れ可能ですか?

それ以外の解決策を見つけたい場合は、すべてのコントローラクラスのリクエストパラメータをフィルタリングする必要があります。

+0

要求パラメータ名でリクエストをフィルタできる特定の方法はありますか? – ghTvNath

+0

@ghTvNath実際、私は今この状況のた​​めの別の解決策を知らない。いくつかの調査が必要です。 –