我在我的wab网站上使用Spring-Mvc,用户可以在其中更改语言 项目工作正常我只需要在我的编码中改进我不 对spring -mvc有太多的了解
我的控制器类的源代码如下所示
@Controller
public class ContentController {
@RequestMapping("/index")
public ModelAndView sriWap(){
Locale locale2 = LocaleContextHolder.getLocale();
String lang_name = locale2.getDisplayLanguage();
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("language",lang_name);
modelAndView.setViewName("sriWap");
return modelAndView;
}
@RequestMapping("/contentCat")
public ModelAndView content_cat_desc(){
Locale locale2 = LocaleContextHolder.getLocale();
String lang_name = locale2.getDisplayLanguage();
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("language",lang_name);
modelAndView.setViewName("content_cat_desc");
return modelAndView;
}
@RequestMapping("/content")
public ModelAndView content(){
Locale locale2 = LocaleContextHolder.getLocale();
String lang_name = locale2.getDisplayLanguage();
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("language",lang_name);
modelAndView.setViewName("content");
return modelAndView;
}
}
正如您所看到的,我在所有方法中编写相同的代码来获取 选定的语言
Locale locale2 = LocaleContextHolder.getLocale();
String lang_name = locale2.getDisplayLanguage();
我不想在上面想写的所有方法中编写上面的代码 代码只有一次,所以所有方法都可以使用的值 ' LANG_NAME'
答案 0 :(得分:2)
您的权利,春天的简单方法,可以防止您的控制器请求方法中的代码重复。您正在寻找有关方法的@ModelAttribute
:http://docs.spring.io/autorepo/docs/spring/current/spring-framework-reference/html/mvc.html#mvc-ann-modelattrib-methods
所以你必须将这个代码重复文档加载到一个方法中,这个方法与@ModelAttribute
完全相同:
@ModelAttribute("language")
public String getLocaleLanguage() {
Locale locale = LocaleContextHolder.getLocale();
return locale.getDisplayLanguage();
}
当这个"语言"您希望将其提取到@ModelAttribute
@Controllers
也需要@ControllerAdvice
答案 1 :(得分:1)
您可以使用@ModelAttribute
注释。
@Controller
public class ContentController {
@ModelAttribute
public void addCommon(Model model){
Locale locale2 = LocaleContextHolder.getLocale();
String lang_name = locale2.getDisplayLanguage();
model.addAttribute("language",lang_name);
//... add another common attributes
}
@RequestMapping("/index")
public ModelAndView sriWap(){
return new ModelAndView("sriWap");
}
....
}
Spring会自动为每个映射方法的模型添加"language"
属性。
答案 2 :(得分:0)
您可以将属性作为实例变量并使用 init方法初始化其值。
@PostConstruct
public void init() {
locale2 = LocaleContextHolder.getLocale();
lang_name = locale2.getDisplayLanguage();
}