问题基于getting a spring model attribute list element using an index from javascript,解释了html元素的每个名称都必须包含索引。示例用户[0]
我有一个表单,允许用户在提交之前以恐怖方式添加或删除列表中的元素。让我举一个例子:我们添加3个用户,因此表单现在将包含3个输入:
<input name="user[0].name" type="text" />
<input name="user[0].surname" type="text" />
<input name="user[1].name" type="text" />
<input name="user[1].surname" type="text" />
<input name="user[2].name" type="text" />
<input name="user[2].surname" type="text" />
如果我们提交此信息,我们将有3个用户,每个用户都有姓名和姓氏。但是,当我们尝试删除用户[1]时会出现问题,因为我使用了这个html:
<input name="user[0].name" type="text" />
<input name="user[0].surname" type="text" />
<input name="user[2].name" type="text" />
<input name="user[2].surname" type="text" />
如果我们提交此表单,则spring仍会创建3个用户,但用户[1]将具有名称和姓氏的空值。
我知道我可以处理输入名称以始终具有“正确”的形式。但还有另一种解决方案吗?我认为像
这样的形式<input name="user[].name" type="text" />
<input name="user[].surname" type="text" />
<input name="user[].name" type="text" />
<input name="user[].surname" type="text" />
可能会解决问题,但后来我才意识到:春天怎么会知道这个名字带来的姓氏。
有关更好解决方案的想法吗?
答案 0 :(得分:1)
最后,我添加了没有索引变量的所有输入(现在我在代码中添加了之前丢失的容器):
<div class="container">
<input name="name" type="text" />
<input name="surname" type="text" />
</div>
<div class="container">
<input name="name" type="text" />
<input name="surname" type="text" />
</div>
<div class="container">
<input name="name" type="text" />
<input name="surname" type="text" />
</div>
因此,在提交表单之前,我使用updateIndexedInputNames($(".container"), "user");
让我分享updateIndexedInputNames的代码:
function updateIndexedInputNames($container, name){
$container.each(function(containerIndex, container){
$(this).find("input,select").each(function(index, element){
$(element).attr("name", name+"["+containerIndex+"]."+element.name);
});
});
}
我不认为这是一个比@ sp00m建议的更好的解决方案,但它也有效。
希望这有助于某人!