我正在寻找一种更清晰的方式(在Spring 3.2中)获取当前语言环境,而不是在每个Controller方法的开头显式调用LocaleContextHolder.getLocale()。它必须与Java注释兼容,因为我没有使用XML配置。这就是我目前正在做的事情。
@Controller
public class WifeController {
@Autowired
private MessageSource msgSrc;
@RequestMapping(value = "/wife/mood")
public String readWife(Model model, @RequestParam("whatImDoing") String iAm) {
Locale loc = LocaleContextHolder.getLocale();
if(iAm.equals("playingXbox")) {
model.addAttribute( "statusTitle", msgSrc.getMessage("mood.angry", null, loc) );
model.addAttribute( "statusDetail", msgSrc.getMessage("mood.angry.xboxdiatribe", null, loc) );
}
return "moodResult";
}
}
答案 0 :(得分:17)
在Spring 3.2 reference docs,第17.3.3节,支持的方法参数类型:
以下是受支持的方法参数:
- 当前请求区域设置的
请求或响应对象(Servlet API)。选择任何特定的请求或响应类型,例如ServletRequest或HttpServletRequest
(...)
java.util.Locale ,由最可用的区域设置解析程序确定,实际上是Servlet环境中配置的LocaleResolver。
所以你需要做的就是在每种方法中接收一个Locale
的实例作为参数:
@RequestMapping(value = "/wife/mood")
public String readWife(Model model, @RequestParam("whatImDoing") String iAm, Locale loc) {
if (iAm.equals("playingXbox")) {
model.addAttribute("statusTitle", msgSrc.getMessage("mood.angry", null, loc));
model.addAttribute("statusDetail", msgSrc.getMessage("mood.angry.xboxdiatribe", null, loc));
}
return "moodResult";
}
答案 1 :(得分:-1)
或者,您也可以自动连接HttpServletRequest
@Autowired
private HttpServletRequest request;
,然后在您的Controller的任何地方使用request.getLocale()
。