0

我有一个将@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 循环不打印任何内容,而对象被添加到具有 name=demo 的模型中。

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

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

4

1 回答 1

1

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

ModelAndView m=new ModelAndView("result");

然后迭代 m ,它只包含一个视图名称(即“结果”)但没有模型。

当您返回一个 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));
     }
    }
于 2015-03-27T19:51:06.060 回答