在表单中混合索引和未索引的列表元素?

时间:2013-10-17 10:18:54

标签: java forms spring spring-mvc

我有一个像

这样的处理程序
@RequestMapping(...)
public String get(@RequestParam List<Cmd> rows) {...}

我使用Spring forms tags生成输入。所以JSP代码

<c:forEach var="i" begin="0" end="${fn:length(rows)}" >
    <form:input path="rows[${i}].name" />
    ...
</c:forEach>

产生

<input name="rows[0].name" value="...' />

这一切都很好,但我也希望允许用户动态添加行,因此需要编写模板input。但是,name="rows.name"name="rows[].name"都不起作用,所以我必须编写代码来生成索引,这很烦人。

我在这里遗漏了什么吗?有没有更好的方法呢?

修改

BTW,我尝试使用Javascript动态生成name="rows[n].name",但如果用户删除中间的行,则会出现问题。重写所有索引的代码似乎是不合理的。

2 个答案:

答案 0 :(得分:0)

试试这个,

<form:input path="${rows[i].name}" />

而不是

<form:input path="rows[${i}].name" />

答案 1 :(得分:0)

您可以使用Javascript插入新输入。 Spring生成以下

<input name="rows[0].name" value="...' />

现在您希望用户输入新值,然后您的Javascript代码应生成以下行

<input name="rows[1].name" value="...' />

并假设用户想要一个更多的值,

<input name="rows[2].name" value="...' />

请记住在使用Javascript生成输入时处理索引。