每个人
我正在使用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对象有准确的表格输入数量。我该怎么办?
提前致谢。