2015-03-27 3 views
0

У меня есть метод, который берет @modelattribute в качестве параметра и возвращает модель и вид объекта, как показано нижеРазница между моделью и ModelAndView весной

@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; 
    } 

цикл по каждому элементу будет ничего не печатает, тогда как объект добавляется для модели с именем = demo.

на странице просмотра, которая является результатом, я получаю значение modelattribute в requestScope.

Почему демонстрационная версия объекта не добавляется к карте модели? не является демо-модельным объектом?

ответ

1

Потому что, хотя объект Employee добавляется в @ModelAttribute аннотированный параметра, вы затем создать новый ModelAndView с линией

ModelAndView m=new ModelAndView("result"); 

Тогда вы итерацию по т, который содержит только имя вида (т.е. " результат "), но нет модели.

Когда вы вернете modelAndView, Spring добавит к нему все другие атрибуты модели, созданные аннотациями @ModelAttribute.

Если вы хотите manilpulate модель в вашем методе, добавьте его в качестве параметра:

@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)); 
    } 
    } 
Смежные вопросы