我有一些简单的 Man 类,其中包含构造函数、getter 和 setter
public class Man {
@Size(min = 3, max = 20, message = "Username must be between 3 and 20 characters long.")
@Pattern(regexp="^[a-zA-Z0-9]+$", message = "Username must be alphanumeric with no spaces")
private String name;
@Size(min = 1, max = 2, message = "Age must be between 1 and 2 characters long")
@Pattern(regexp = "^[0-9]+$", message = "Age must be numerical with no spaces")
private String age;
Man(){
}
Man(String name, String age){
super();
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public String getAge(){
return age;
}
public void setName(String name){
this.name = name;
}
public void setAge(String age){
this.age = age;
}
}
它服务:
@Service
public class ManService {
Map<String, Man> people = new HashMap();
public void saveMan(Man man){
System.err.println(man); // after the form is submitted object is created
System.err.println(man.getName()); // but it name == null
System.err.println(man.getAge()); // and age == null
people.put(man.getName(), man);
}
}
通用控制器。当转到 /user?new 时,将创建对象 Man() 并将其插入框 modelAttribute 中,但在提交表单后,Man() 对象的 name 和age 字段将等于空值。
@RequestMapping(value="/user", method = GET, params = "new")
public String outputParam(Model model){
model.addAttribute("box",new Man());
return "param";
}
@RequestMapping(value="/user", method = POST)
public String addFromForm(@Valid Man man, BindingResult bindingResult){
if (bindingResult.hasErrors()) {
return "param";
}
manService.saveMan(man);
return "redirect:../list";
}
view:
<sf:form method="POST" modelAttribute="box" enctype="multipart/form-data">
<fieldset>
<table cellspacing="0">
<tr>
<th><sf:label path="name">User name:</sf:label></th>
<td><sf:input path="name" size="15" /></td>
<sf:errors path="name" cssClass="error"/>
</tr>
<tr>
<th><sf:label path="age">Age:</sf:label></th>
<td><sf:input path="age" size="20" /></td>
<sf:errors path="name" cssClass="error"/>
</tr>
<input name="commit" type="submit" value="sent this shit" />
</table>
</fieldset>
</sf:form>
在结果 POST 表单中,不绑定输入字段中的值。