我刚刚迈出了国际化领域的第一步,我将准备一个用于多语言的 Spring MVC 应用程序。我用谷歌搜索并阅读了一些示例(例如:http: //viralpatel.net/blogs/spring-3-mvc-internationalization-i18n-localization-tutorial-example/),看起来很简单。我使用了与此示例完全相同的设置以及其中引用的修复程序中的代码。我在不同论坛的许多帖子中看到了相同的设置。
我不完全理解的一件事是:我有一个控制器方法,其映射如下所示:
@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 会拦截这个调用并处理它。
所以我的问题是:我是否做出了正确的假设,如果不是,当控制器方法具有其他参数时,拦截器应该如何工作。如果我做出正确的假设 - 任何想法为什么这不起作用。