我有一个表格:
<form action="/processform">
<input name="firstname" value="john" />
<input name="lastname" value="doe" />
</form>
我有一个 Person 对象:
public class Person {
private String firstname;
private String lastname;
// ... getters & setters ...
}
我想接收此数据,对其执行验证,然后将其发布到数据存储区。
如何编写 Controller 来执行此操作?我知道我可以将参数作为请求参数传递,但我认为执行此操作的“正确”方法是以某种方式将数据从表单绑定(bind)到 Person 对象,然后在 Controller 中接收该 Person 对象并调用 Validate 对象被配置为接收 Person 对象。
经过大量阅读,这一步让我感到困惑。有人可以告诉我“绑定(bind)”数据、“验证”(例如 validator )和“处理”数据(例如 Controller ,特别是作为参数传递给它的内容)需要什么吗?
最佳答案
这是我一直在寻找的答案,我不明白 Spring 默认情况下会从表单提交中获取所有参数(例如“名字”和“姓氏”)并可以创建对象你通过调用这些参数的setter方法。
Controller :
@Controller
public class MyFormProcessor {
@RequestMapping("/formsubmit")
public String handleForm(@Valid Person person, BindingResult errors, Map<String,Object> model){
// ...handle form...
}
}
在为此请求调用 handleForm
之前,Spring 本质上是在执行以下魔术(显然以比我为这个简单示例描述的更可扩展的方式):
Person person = new Person();
person.setFirstname( request.getParameter("firstname") );
person.setLastname( request.getParameter("lastname") );
handleForm(person, anErrorsObject, new Model());
对于验证,您可以创建自己的 validator (我不会在这里提及任何内容),或者如果您在类路径中包含 Hibernate Validator,那么您可以注释 Person
类(示例下面)并且当您添加 @Valid
注释时,如我在上面的示例中描述的那样,Hibernate validator 将根据这些注释验证类并将任何错误发布到错误对象(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 ...
}
关于java - Spring-MVC:需要最简单的表单处理、绑定(bind)和验证示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4112149/