弹簧形式与 SpringMVC 中的后端对象的绑定和工作



我是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";
}

任何人都可以解释或提供一个有充分解释的链接

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

关于模型和模型图的区别: ModelMap子类LinkedHashMap,并提供一些额外的便利,使其更容易被控制器使用

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

所以没有什么惊天动地的,但足以让它比生Map更好一点.春天会让你使用任何一个。

您还可以使用 Model 接口,该接口只提供 addAttribute 方法,并由 ExtendedModelMap 类实现,该类本身增加了更多便利。

最新更新