如何拦截@modelattribute绑定

时间:2015-05-23 14:41:09

标签: spring forms binding tags modelattribute

每个人

我正在使用spring mvc框架和spring form标签。我动态地使用表单时发现了意外的事情。例如,

public class Person {
    public List<Car> myCars = new ArrayList<Car>();
    // getter and setter
}

下面的代码是html表单

<form:form modelAttribute="car" ...>
<input type="hidden" name="myCars[0].id">
<input type="text" name="myCars[0].name">
<input type="hidden" name="myCars[1].id">
<input type="text" name="myCars[1].name">
<input type="hidden" name="myCars[2].id">
<input type="text" name="myCars[2].name">
</form:form>

下一个代码是一个弹簧形式控制器

@Controller
@SessionAttribute({"car"})
public class CarController {
    ...
    @RequestMapping(".....")
    public String form(@ModelAttribute Car car, BindingResult result, ...) {
        if (result.hasErrors()) {
            ....
            return viewName;
        }
        ....
        return "redirect:/" + someWhere;
    }
}

1)我输入数据为html格式 2)我可以确认car.getMyCars()中有3个Car对象 3)绑定有一些错误,因此它被重定向到viewName
4)我使用jQuery改变了html表单,如此

<form:form modelAttribute="car" ...>
<input type="hidden" name="myCars[0].id">
<input type="text" name="myCars[0].name">
<input type="hidden" name="myCars[1].id">
<input type="text" name="myCars[1].name">
</form:form>

并提交。这次测试的结果是@ModelAttribue Car car仍然是List myCars中的第3个元素。我希望保留2个Car元素,但它不是。我认为它仍在进行中。并且它被覆盖了新的表单数据到@ModelAttribute Car car对象,但最后的第3个元素不是。我的测试显示,如果表单元素动态增加,则使用@ModelAttribute的绑定对象具有它们。但是虽然动态减少,绑定对象仍然有它们。我希望Car car对象有准确的表格输入数量。我该怎么办?

提前致谢。

0 个答案:

没有答案