理解Spring-MVC应用程序中数据绑定的概念

Dav*_*rks 4 java data-binding spring-mvc

我试图用Velocity 理解Spring-MVC中的数据绑定的概念(我正在学习这个框架并将应用程序移植到这个平台).

我习惯于使用表单变量request.getParameter("username"),在Spring世界中我似乎可以对" 表单对象 " 执行验证,例如表示表单所有字段的数据模式样式对象.

验证器的概念是有道理的,但是将查询字符串中的数据封送到这些对象仍然是模糊的.这是"数据绑定"的概念是否正确?

如果我对这一点提出一些具体问题:

  • 当在表单变量("username"例如)之间进行"绑定" 并且对象的字段(比如说org.a.b.MyNewUserFormObj.username)是"绑定"永久定义时,该表单的所有后续http帖子都会导致username表单变量被分配到org.a.b.MyNewUserFormObj.username
  • 我如何在世界上完成上述绑定定义?(如果我现在所说的是正确的,我觉得Costello在'谁在第一',我甚至不知道我刚刚说了什么!),我只需要一张概念图.

感谢你直接让大脑误入歧途.

axt*_*avt 5

数据绑定没有魔力.

实际上,Spring只是@ModelAttribute使用具有相应名称的请求参数的值来填充对象的属性(在最简单的情况下,请求参数与属性具有相同的名称,但也支持嵌套属性).

所以,如果你有

<input type = "text" name = "firstName" />
Run Code Online (Sandbox Code Playgroud)

public class Person {
    private String firstName;
    ... getters, setters ...
}
Run Code Online (Sandbox Code Playgroud)

你从表单字段中获取一个值.

Spring还提供了创建HTML表单的便捷方法.因此,您可以在JSP中编写,而不是手动创建表单字段:

<form:form modelAttribute = "person" ...>
    <form:input path = "firstName" />
</form:form>
Run Code Online (Sandbox Code Playgroud)

或者在Velocity中(请注意,在这种情况下<form>,手动创建,属性路径以模型属性名称为前缀):

<form ...>
    #springFormInput("person.firstName" "")
</form>
Run Code Online (Sandbox Code Playgroud)

以这种方式生成的表单的字段将预先填充模型属性的相应属性的值(这就是需要模型属性名称的原因).