我已经在许多教程和其他地方注意到,提交表单时,使用名为“ SpringWeb”的默认模型属性将所有jsp元素映射到Java POJO。

例如,在以下教程中,@ModelAttribute("SpringWeb")映射到Student对象。

@RequestMapping(value = "/addStudent", method = RequestMethod.POST)
      public String addStudent(@ModelAttribute("SpringWeb")Student student,

   ModelMap model) {
      model.addAttribute("name", student.getName());
      model.addAttribute("age", student.getAge());
      model.addAttribute("id", student.getId());

      return "result";
   }

@RequestMapping(value = "/student", method = RequestMethod.GET)
   public ModelAndView student() {
      return new ModelAndView("student", "command", new Student());
   }


http://www.tutorialspoint.com/spring/spring_mvc_form_handling_example.htm

即使如示例中的GET方法未返回“ new ModelAndView("student", "command", new Student())”对象,当回发表单时,“ SpringWeb”模型属性仍然存在。
例如-在GET请求中,如果我写model.addAttribute ("xyz", "123)并仅返回视图名称,则不会在jsp标记中使用“路径”映射表单字段。当表单回发时,表单字段仍将通过“ SpringWeb”映射到java对象。

github中也没有“ SpringWeb”的搜索结果:
https://github.com/spring-projects/spring-framework/search?utf8=%E2%9C%93&q=SpringWeb&type=

我确实知道可以使用自定义模型属性并将其映射到表单元素,而不是使用@ModelAttribute("SpringWeb")
但是,我在stackoverflow中找不到任何相关的问题,这些问题可以详细解释什么是“ SpringWeb”以及使用它是好还是不好的做法?

我在“ POST”请求上调试了模型对象,发现“ SpringWeb”在“ BindingAwareModelMap”模型对象中自动作为“键”和“值”对存在。但是,在下面的链接中找不到任何与“ SpringWeb”相关的文档。

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/validation/support/BindingAwareModelMap.html

什么是“ SpringWeb”?我目前的理解是,这是一个“包罗万象”的模型属性,当提交表单时,它将由spring自动映射。
如果是,那么如何发现它并决定在没有任何文档的情况下使用它? (至少我找不到任何东西)

最佳答案

表单标签的默认模型属性是command。在引用的示例中,“魔术”发生在此处:

@RequestMapping(value = "/student", method = RequestMethod.GET)
public ModelAndView student() {
    // the second and third parameter:
    // a new Student is binded to the form-tags default modelattribute
    return new ModelAndView("student", "command", new Student());
}


ModelAndView的Constructor的第二个和第三个参数负责将新的Student-Object绑定到表单标签的默认modelattribute“ command”

在接收后方法中,模型属性注释“ SpringWeb”的名称-值

@ModelAttribute("SpringWeb") Student student


也可以删除

@ModelAttribute Student student

08-17 02:30