gpt4 book ai didi

java - Spring MVC 中 Spring 表单与后端对象的绑定(bind)和工作

转载 作者:行者123 更新时间:2023-11-30 03:45:21 25 4
gpt4 key购买 nike

我是 SpringMvc 新手。谁能解释一下 spring 表单与 SpringMVC 中后端对象的绑定(bind)和工作原理。

一些疑问是考虑这种情况,有一个表单将获取用户详细信息并将其保存到数据库1)我看到一个 Controller 创建用户的实例并将属性添加到 ModelMap。那有什么用呢?

@Controller
@RequestMapping("/form.html")
public ModelAndView form(ModelMap map){

User user= new User();
map.addAttribute("user",user);
return new ModelAndView("form","command",map);

}

2)这里命令有什么用?在表单页面中,这个“用户”对象将可用吗?

*form.jsp

<form:form.... action="formprocess.html" commandName="user"/> 

(如果我想使用“用户”,它应该已经按照上面创建了吗?)

3)为什么我们使用@ModelAttribute?为什么我们使用 Model 而不是 ModelMap?

@Controller
@RequestMapping("/formprocess.html")
public String form(@ModelAttribute("user"User user,Model model){

model.addAttribute("username",user.getUserName());
return "formprocess";

}

任何人都可以解释一下或提供一个有足够解释的链接

最佳答案

  1. 关于ModelMap ,模型映射用于将某些数据从 Controller 传递到您从该 Controller 委托(delegate)的 View 。您从 Controller 添加属性,然后从 View 页面获取属性。
  2. 关于commandName , commandName="user" Controller 使用它来将表单字段映射到特定的 bean 或 POJO 字段。因此,您不必在提交表单且 Controller 接收事件时手动获取所有请求参数并设置它。
  3. 关于@ModelAttribute ,因为您使用 @ModelAttribute("user")作为方法参数,spring容器将查找命令名称user来自request对象并将其属性映射到 @ModelAttribute 中定义的 pojo即您的情况User class

关于 Model 和 ModelMap 之间的区别: ModelMap子类LinkedHashMap ,并提供了一些额外的便利,使 Controller 更容易使用

  • addAttribute可以只用一个值来调用,然后从类型中推断出映射键。
  • addAttribute方法都返回 ModelMap ,这样您就可以将调用的方法链接在一起,例如modelMap.addAttribute('x', x).addAttribute('y',y)
  • addAttribute方法检查值是否不为空
  • ModelMap 的泛型类型固定为Map<String, Object> ,这是唯一对 View 模型有意义的。

所以没有什么惊天动地的事情,但足以使它比原始的 Map 更好一点。 。 Spring 会让您使用其中任何一个。

您还可以使用Model接口(interface),除了 addAttribute 之外不提供任何内容方法,并由 ExtendedModelMap 实现类本身增加了更多便利。

关于java - Spring MVC 中 Spring 表单与后端对象的绑定(bind)和工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25884414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com