spring 中模型与模型和视图之间的区别

Difference between model and modelandview in spring

我有一个方法将@modelattribute 作为参数并返回模型和视图对象,如下所示

@RequestMapping(value = "/pathtorequest", method = RequestMethod.POST)
    public ModelAndView redirectdemo( HttpServletRequest req,@ModelAttribute(value="demo") Employee e) {
        ModelAndView m=new ModelAndView("result");
        Map<String,Object> map=m.getModel();
        for(String s:map.keySet()){
            System.out.println("key::"+s+" value::"+map.get(s));
        }
        return m;
    }

foreach 循环未打印任何内容,而对象已添加到名称为 demo 的模型。

在作为结果的视图页面中,我在 requestScope 中获取 modelattribute 的值。

为什么对象演示没有添加到模型图中?演示不是模型对象吗?

因为,虽然 Employee 对象是通过 @ModelAttribute 注解参数添加的,但是您随后使用以下行创建了一个全新的 ModelAndView

ModelAndView m=new ModelAndView("result");

然后迭代只包含视图名称(即 "result")但不包含模型的 m。

当您 return 一个 modelAndView 时,Spring 将向其添加由 @ModelAttribute 注释创建的所有其他模型属性。

如果您想在您的方法中操纵模型,请将其添加为参数:

@RequestMapping(value = "/pathtorequest", method = RequestMethod.POST)
    public ModelAndView redirectdemo( HttpServletRequest req,@ModelAttribute(value="demo") Employee e, ModelMap modelMap) {
     for(String s : modelMap.keySet()){
        System.out.println("key::"+s+" value::"+modelMap.get(s));
     }
    }