2

该问题基于使用来自javascript的索引获取spring模型属性列表元素,其中解释了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 个用户,但 user[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" />

可能会解决问题,但后来我意识到:春天怎么知道哪个名字与哪个姓氏有关。

关于更好的解决方案的任何想法?

4

1 回答 1

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 建议的解决方案更好,但它也可以。

希望这对某人有帮助!

于 2013-02-01T15:05:34.503 回答