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

时间:2014-09-17 07:10:21

标签: java spring spring-mvc

我是SpringMvc的新手。任何人都可以在SpringMVC中解释弹簧形式与后端对象的绑定和工作。

有些疑惑是 考虑一下这个场景,有一个表单可以获取用户的详细信息并将其保存到db 1)我见过一个控制器,它创建用户的实例并将属性添加到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 个答案:

答案 0 :(得分:2)

  1. 关于ModelMap,模型映射用于将某些数据从您的控制器传递到您从该控制器委派的视图。您可以从控制器添加属性,稍后从视图页面获取属性。
  2. 关于commandNamecommandName="user"这是控制器用于将表单字段映射到特定bean或POJO字段的内容。因此,当提交表单并且控制器收到事件时,您不必手动获取所有请求参数并将其设置为pooos。
  3. 关于@ModelAttribute,由于您使用@ModelAttribute("user")作为方法参数,因此spring容器将从user对象中查找命令名request,并将其属性映射到定义的pojos在@ModelAttribute的情况下User class
  4. 关于Model和ModelMap之间的区别: ModelMap子类LinkedHashMap,并提供一些额外的便利,使控制器更容易使用

      只能使用一个值调用
    • addAttribute,然后从类型中推断出地图密钥。
    • addAttribute方法都返回ModelMap,因此您可以链接一起调用的方法,例如modelMap.addAttribute('x', x).addAttribute('y',y)
    • addAttribute方法检查值是否为空
    • ModelMap的泛型类型固定为Map<String, Object>,这是唯一对视图模型有意义的内容。

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

    您还可以使用Model接口,该接口除了addAttribute方法之外什么都不提供,并且由ExtendedModelMap类实现,它本身增加了更多便利。