我正在使用spring开发Web应用程序。我有两个bean类。 这是超级班。
public class SuperClass{
protected String name;
public SuperClass(){
}
public SuperClass(String name){
this.name = name;
}
// here the getter and the setter
}
这是子类
public class SubClass extends SuperClass{
protected String address;
public SubClass(){
}
public SubClass(String name, String address){
super(name);
this.address = address;
}
// here the getters and the setters
}
这是我的控制器类。
@Controller
@RequestMapping("/editSub")
public class EditController {
@RequestMapping(method = RequestMethod.GET)
public String showEdit(ModelMap model){
model.addAttribute("sub", new SubClass("some name", "some address"));
return "edit";
}
@RequestMapping(method = RequestMethod.POST)
public String edited(@ModelAttribute("sub") SubClass sub, ModelMap model) {
//do somthing here
model.addAttribute("sub", sub);
return "somepage";
}
}
在我的edit.jsp中,
<form:form method="POST" modelAttribute="sub" action="editSub">
<form:input path="name"/>
<form:input path="address"/>
<input type="submit" value="Edit"/>
</form:form>
这是我的问题。当我尝试这个时,它给了我400错误。但是当我在控制器类中更改“编辑”方法时,它可以正常工作。
@RequestMapping(method = RequestMethod.POST)
public String edited(@ModelAttribute("sub") SuperClass sub, ModelMap model) {
//do somthing here
model.addAttribute("sub", sub);
return "somepage";
}
但很明显,对象中没有任何地址字段。所以它只适用于超类,并在将表单绑定到子类时给出400错误。我不明白为什么?对象“sub”也不能在“编辑”方法中转换为SubClass。
请帮助我。我搜索了这个并没有找到有用的东西。我也读过这个帖子。 http://forum.springsource.org/showthread.php?94650-Problem-binding-subclasses。但它并没有解决我的问题。