1

我正在用 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。但这并不能解决我的问题。

4

0 回答 0