这个问题基于wich上的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" />
如果我们提交这个表单,springs仍然会创建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" />
也许可以解决这个问题,但后来我意识到:spring怎么知道wich name跟wich name一起来。
有更好的解决方案吗?
最佳答案
最后,我添加了所有不带索引变量的输入(在下面的代码中,我将添加以前丢失的容器):
<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建议的更好的解决方案,但它也能工作。
希望这能帮助别人!