私は国際化の分野への第一歩を踏み出しました。そこでは、多言語で使用するためのSpringMVCアプリケーションを準備します。私はグーグルでいくつかの例を読みました(この例のように:http://viralpatel.net/blogs/spring-3-mvc-internationalization-i18n-localization-tutorial-example/)そしてそれはかなり簡単に思えます。この例とまったく同じセットアップと、その中で参照されている修正のコードを使用しました。さまざまなフォーラムの多くの投稿で、これと同じ設定を見てきました。
私が完全に理解していないことの1つは、これです。次のようなマッピングを持つコントローラーメソッドがあります。
@RequestMapping(value = "/placeDetails.htm"、method = RequestMethod.GET)public String showPlaceDetails(Model model、@RequestParam(value = "placeId"、required = true)int placeId、Locale locale){
www.me.com/placeDetails.htm?placeId=123のようなリクエストをキャッチします。
「言語の変更」メニュー項目に追加したhrefには、href = "?lang=en"と表示されます。私が見る限り、URL www.me.com/placeDetails.htm?lang=enになります(メニュー項目にカーソルを合わせるとこれが表示されます)。上記のメソッドのリクエストマッピングはこれを認識せず、Tomcatから「クライアントから送信されたリクエストは構文的に正しくありませんでした()」というエラーメッセージが表示されます。私のコントローラーは、langというパラメーターを使用してwww.me.com/placeDetails.htmが呼び出されないことを認識しています。
langパラメーターを含むリクエストマッピングを使用して別のメソッドを追加する必要はないというのが私の仮定でした(そして今でもそうです)。LocaleChangeInterceptorがこの呼び出しをインターセプトして処理すると想定しました。
だから私の質問は:私は正しい仮定をしていますか、そうでない場合、コントローラーメソッドが他のパラメーターを持っているときにインターセプターはどのように機能するはずです。私が正しい仮定をしている場合-これが機能しない理由についてのアイデア。