私はSpringMVCを初めて使用し、自分のサイトにi18nを追加しようとしています。私は次の構成を持っています:
サーブレット-コンテキスト.xml:
<beans:bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<beans:property name="paramName" value="language" />
</beans:bean>
<beans:bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
<beans:property name="interceptors">
<beans:list>
<beans:ref bean="localeChangeInterceptor" />
</beans:list>
</beans:property>
</beans:bean>
<beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<beans:property name="basename" value="messages" />
</beans:bean>
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
そしてコントローラー:
@Controller
public class HomeController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
return "home";
}
@RequestMapping(value = "/welcome", method = RequestMethod.GET)
public String welcome(Locale locale, Model model) {
return "WelcomePage";
}
}
WelcomePage.jspのコンテンツは次のとおりです。
Language : <a href="?language=en">English</a>|<a href="?language=de_DE">German</a>
<h3>
<spring:message code="welcome.springmvc" text="default text" />
</h3>
上に表示されているリンクをクリックしても、リンクのURLは../welcome?language=de_DE
たとえばになりますが、ロケールは変更されません。次のようなコントローラーを追加すると、WelcomePage.jspによってロケールが正しく変更されます。
public class WelcomeController extends AbstractController{
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView model = new ModelAndView("WelcomePage");
return model;
}
}
最初のタイプのコントローラー(RequestMapppingを使用)を使用する場合、ロケールを変更するにはどうすればよいですか?