我是SpringMvc的新手。谁能解释SpringMVC与SpringMVC中的后端对象的绑定和工作。
有些疑问是
考虑这种情况,有一个表单将接收用户详细信息并将其持久化到数据库
1)我见过一个控制器,该控制器创建User的实例并将该属性添加到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";
}
任何人都可以解释或提供具有足够解释的链接
最佳答案
关于ModelMap
,模型映射用于将某些数据从您的控制器传递到您从该控制器委派的视图。您可以从控制器添加属性,稍后再从视图页面获取属性。
关于commandName
,commandName="user"
是控制器用来将表单字段映射到特定bean或POJO字段的内容。因此,您不必手动获取所有请求参数并在提交表单且控制器接收到事件时对其进行设置。
关于@ModelAttribute
,由于您将@ModelAttribute("user")
用作方法参数,因此spring容器将在user
对象中查找命令名称request
,并将其属性映射到@ModelAttribute
中定义的pojo中,在您的情况下User class
。
关于Model和ModelMap之间的区别:ModelMap
子类LinkedHashMap
,并提供了一些其他便利,使控制器更易于使用
可以仅用一个值调用addAttribute
,然后从该类型推断出map键。addAttribute
方法都返回ModelMap
,因此您可以将调用的方法链接在一起,例如modelMap.addAttribute('x', x).addAttribute('y',y)
addAttribute
方法检查值是否不为nullModelMap
的通用类型固定为Map<String, Object>
,这是唯一对视图模型有意义的类型。
因此,没有什么惊世骇俗的,但足以使它比原始的Map
好。 Spring将允许您使用其中任何一个。
您还可以使用Model
接口,该接口仅提供addAttribute
方法,并且由ExtendedModelMap
类实现,该类本身增加了更多便利。