我是SpringMvc的新手。谁能解释一下弹簧形式与 SpringMVC 中后端对象的绑定和工作。
一些疑问是考虑这种情况,有一个表单将获取用户详细信息并将其持久化到 db1(我看到一个控制器,它创建用户的实例并将属性添加到模型图。那有什么用?
@Controller
@RequestMapping("/form.html")
public ModelAndView form(ModelMap map){
User user= new User();
map.addAttribute("user",user);
return new ModelAndView("form","command",map);
}
2(命令在这里有什么用?在表单页面中,这个"用户"对象是否可用?
*表格.jsp
<form:form.... action="formprocess.html" commandName="user"/>
(如果我想使用"用户",它应该已经如上所述创建吗?
3( 我们为什么要使用@ModelAttribute?为什么我们使用模型而不是模型图?
@Controller
@RequestMapping("/formprocess.html")
public String form(@ModelAttribute("user"User user,Model model){
model.addAttribute("username",user.getUserName());
return "formprocess";
}
任何人都可以解释或提供一个有充分解释的链接
- 关于
ModelMap
,模型映射用于将某些数据从控制器传递到您从该控制器委托的视图。您从控制器添加属性,然后从视图页面获取属性。 - 关于
commandName
,commandName="user"
这是控制器用来将表单字段映射到特定 bean 或 POJO 字段的东西。因此,您不必手动获取所有请求参数,并在提交表单并且控制器收到事件时对其进行设置。 - 关于
@ModelAttribute
,由于您使用@ModelAttribute("user")
作为方法参数,因此 spring 容器将从对象中查找user
的命令名称request
并将其属性映射到@ModelAttribute
可视化中定义的 pojoUser class
。
关于模型和模型图的区别: ModelMap
子类LinkedHashMap
,并提供一些额外的便利,使其更容易被控制器使用
-
addAttribute
可以只用一个值来调用,然后从类型推断出映射键。 addAttribute
方法都返回ModelMap
,所以你可以将方法链接在一起调用,例如modelMap.addAttribute('x', x).addAttribute('y',y)
addAttribute
方法检查值是否不为 nullModelMap
的泛型类型固定在Map<String, Object>
,这是唯一对视图模型有意义的类型。
所以没有什么惊天动地的,但足以让它比生Map
更好一点.春天会让你使用任何一个。
您还可以使用 Model
接口,该接口只提供 addAttribute
方法,并由 ExtendedModelMap
类实现,该类本身增加了更多便利。