2013-10-17 156 views
0

我有这样在表单中混合索引和非索引列表元素?

@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"都不起作用,所以我必须编写代码来生成索引,这很烦人。

我在这里错过了什么吗?有没有更好的方法来做到这一点?

编辑:

顺便说一句,我试图用Javascript生成动态name="rows[n].name",但如果用户删除在中间一排它成为一个问题。重写所有索引的代码似乎是不合理的。

回答

0

您可以使用JavaScript来插入新的输入。弹簧产生以下

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

现在你要用户输入新的值,那么你的JavaScript代码应生成以下行

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

,并假设用户想要一个更大的价值的话,

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

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

+0

我最终在一些服务器端处理中使用了这个表单来消除由删除条目创建的“空白”。 –

+0

在我们的项目中,索引是使用Javascript进行管理的。所以你得到空值删除索引或什么? –

+0

是的。当您从中间删除行时,代码先前崩溃。我添加了代码以预先扫描列表,并在传递之前除去空值。使用javascript来管理索引似乎对于我正在处理的简单表单来说太复杂了(它不会在任何地方使用异常来添加/删除行)。 –

0

试试这个,

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

,而不是

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

嗨,这不起作用'路径'需要一个路径到请求上下文中的对象不是一个值。 –