我正在用 spring 开发 web 应用程序。我有两个豆类。这是超级班。
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”不能在“edited”方法中转换为 SubClass。
请帮我解决。我对此进行了搜索,但没有发现任何有用的信息。我也读过这个线程。http://forum.springsource.org/showthread.php?94650-Problem-binding-subclasses。但这并不能解决我的问题。