Dav*_*rks 7 java data-binding validation spring-mvc
我有一个表格:
<form action="/processform">
<input name="firstname" value="john" />
<input name="lastname" value="doe" />
</form>
Run Code Online (Sandbox Code Playgroud)
我有一个Person对象:
public class Person {
private String firstname;
private String lastname;
// ... getters & setters ...
}
Run Code Online (Sandbox Code Playgroud)
我想接收这些数据,对其进行验证,然后将其发布到数据存储区.
如何编写控制器来执行此操作?我理解我可以将参数作为请求参数传递,但我认为"正确"的方法是以某种方式将数据从表单绑定到Person对象,然后在控制器中接收Person对象并调用Validate对象配置为接收Person对象.
经过多次阅读,这一步令我感到困惑.有人能告诉我"绑定"数据需要什么,"验证"(例如验证器),并"处理"数据(例如控制器,特别是作为参数传递给它的内容)?
Dav*_*rks 12
这是我正在寻找的答案,我不明白Spring默认会从表单提交中获取所有参数(例如"firstname"和"lastname"),并可以通过调用为您创建对象这些参数的setter方法.
控制器:
@Controller
public class MyFormProcessor {
@RequestMapping("/formsubmit")
public String handleForm(@Valid Person person, BindingResult errors, Map<String,Object> model){
// ...handle form...
}
}
Run Code Online (Sandbox Code Playgroud)
Spring在调用handleForm此请求之前基本上做了以下魔术(显然是以比我描述的这个简单示例更可扩展的方式):
Person person = new Person();
person.setFirstname( request.getParameter("firstname") );
person.setLastname( request.getParameter("lastname") );
handleForm(person, anErrorsObject, new Model());
Run Code Online (Sandbox Code Playgroud)
对于验证,您可以创建自己的验证器(我不会在这里提及任何内容),或者如果在类路径中包含Hibernate Validator,那么您可以注释Person该类(下面的示例)并在您添加@Valid注释时如我所描述的那样在上面的示例中,Hibernate验证器将根据这些注释验证类,并将任何错误发布到错误对象(BindingResult对象是Springs的扩展Errors,对于简单的示例,Errors对象是有趣的组件).
JSR-303验证带注释的Person类(与@Valid选项一起使用):
public class Person {
@NotNull
@Size(min=3, max=20)
private String firstname;
@NotNull
@Size(min=3, max=20)
private String lastname;
// ... getters & setters ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14856 次 |
| 最近记录: |