这个问题基于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建议的更好的解决方案,但它也能工作。
希望这能帮助别人!

07-26 07:19