Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
@modeldattribute和org.springframework.ui.ModelMap.get()之间的区别?_Spring_Spring Mvc_Annotations - Fatal编程技术网

@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注释,它做了两件事:

  • 使用提交的表单数据创建投票对象
  • 通过将投票对象添加到模型(请求,或者,在您的情况下,由于@SessionAttributes({“Voting”}),会话)向视图公开投票对象

  • 第二种方法只使用ModelMap,因此它只获取模型属性(根据@SessionAttributes注释,从请求或会话获取)。此方法不使用提交表单中的数据。

    谢谢您的回答。我知道它不使用表单中的数据,但为什么?或者为什么@ModelAttribute不使用我可以通过ModelMap访问的同一个模型?它不使用表单中的数据,因为您没有“告诉”Spring这样做。