Spring表单提交不能绑定到子类

时间:2013-07-04 17:47:53

标签: java spring-mvc subclass superclass modelattribute

我正在使用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。但它并没有解决我的问题。

0 个答案:

没有答案