【问题标题】:binding and working of spring form with the back end object in SpringMVCSpring MVC中spring表单与后端对象的绑定和工作
【发布时间】:2014-09-17 07:10:20
【问题描述】:

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

有些疑问是 考虑这种情况,有一个表单将获取用户详细信息并将其持久化到 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";

}

谁能解释或提供一个有足够解释的链接

【问题讨论】:

    标签: java spring spring-mvc


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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 2014-05-08
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      相关资源
      最近更新 更多