@modeldattribute和org.springframework.ui.ModelMap.get()之间的区别?
我试图使用一个对象作为@modeldattribute和org.springframework.ui.ModelMap.get()之间的区别?,spring,spring-mvc,annotations,Spring,Spring Mvc,Annotations,我试图使用一个对象作为元素的命令对象 在控制器的GET方法中,我添加如下对象: @RequestMapping(method = RequestMethod.GET) public String renderForm(ModelMap model, HttpServletRequest request) { [...] model.addAttribute("voting", voting); [...] } <form:form action="vote" me
元素的命令对象
在控制器的GET方法中,我添加如下对象:
@RequestMapping(method = RequestMethod.GET)
public String renderForm(ModelMap model, HttpServletRequest request) {
[...]
model.addAttribute("voting", voting);
[...]
}
<form:form action="vote" method="PUT" commandName="voting" name="oform">
当定义如下时,渲染表单确实正确显示命令对象:
@RequestMapping(method = RequestMethod.GET)
public String renderForm(ModelMap model, HttpServletRequest request) {
[...]
model.addAttribute("voting", voting);
[...]
}
<form:form action="vote" method="PUT" commandName="voting" name="oform">
或者我访问ModelMap并从基础映射获取值:
@RequestMapping(method = RequestMethod.PUT)
public String newVoting(ModelMap model, HttpServletRequest request) {
Voting voting = (Voting) model.get("voting");
[...]
}
在执行第一个操作时,我得到表单提交的对象。在执行后一种操作时,我得到了表单处理之前的对象
为什么表单的submit没有更改ModelMap中的对象,为什么@ModelAttribute与实际模型中的不同?我觉得“modeldattribute”这个名称应该产生相同的对象,就像直接从模型中获取对象一样
也许@modeldattribute有点误导人
编辑
忘了提到对象是@SessionAttributes
@SessionAttributes({"voting", "state"})
第一种方法是使用@modeldattribute注释,它做了两件事:
第二种方法只使用ModelMap,因此它只获取模型属性(根据@SessionAttributes注释,从请求或会话获取)。此方法不使用提交表单中的数据。谢谢您的回答。我知道它不使用表单中的数据,但为什么?或者为什么@ModelAttribute不使用我可以通过ModelMap访问的同一个模型?它不使用表单中的数据,因为您没有“告诉”Spring这样做。