如何设置控制器的变量名 class 以便所有模型视图都可以访问该变量值?
How to set variable name of controller class so that all modelview can access that variable value?
我在我的 wab 站点中使用 Spring-Mvc,用户可以在其中更改我的语言
项目运行良好我只是需要改进我的编码我不需要
对 spring -mvc
了解太多
我的控制器class的源代码如下
@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'
您可以将属性作为实例变量并使用
初始化其值的 init 方法。
@PostConstruct
public void init() {
locale2 = LocaleContextHolder.getLocale();
lang_name = locale2.getDisplayLanguage();
}
你的权利,spring 中有一个简单的方法,它可以防止在你的控制器请求方法中重复代码。您正在寻找 @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();
}
当其他 @Controllers
也需要此 "language" @ModelAttribute
时,您想将其提取到 @ControllerAdvice
您可以使用 @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"
属性到模型。
我在我的 wab 站点中使用 Spring-Mvc,用户可以在其中更改我的语言 项目运行良好我只是需要改进我的编码我不需要 对 spring -mvc
了解太多我的控制器class的源代码如下
@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'
您可以将属性作为实例变量并使用 初始化其值的 init 方法。
@PostConstruct
public void init() {
locale2 = LocaleContextHolder.getLocale();
lang_name = locale2.getDisplayLanguage();
}
你的权利,spring 中有一个简单的方法,它可以防止在你的控制器请求方法中重复代码。您正在寻找 @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();
}
当其他 @Controllers
也需要此 "language" @ModelAttribute
时,您想将其提取到 @ControllerAdvice
您可以使用 @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"
属性到模型。