如何设置控制器的变量名 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" 属性到模型。