Java 如何将表单字段集合发布到Spring控制器?
假设我有这样的形式:Java 如何将表单字段集合发布到Spring控制器?,java,spring,spring-mvc,Java,Spring,Spring Mvc,假设我有这样的形式: <form method="post" action="/create"> <input type="text" name="title.0" value="Curious George" /> <input type="text" name="author.0" value="H.A. Rey" /> <input type="text" name="date.0" value="2/23/1973" /
<form method="post" action="/create">
<input type="text" name="title.0" value="Curious George" />
<input type="text" name="author.0" value="H.A. Rey" />
<input type="text" name="date.0" value="2/23/1973" />
<input type="text" name="title.1" value="Code Complete" />
<input type="text" name="author.1" value="Steve McConnell" />
<input type="text" name="date.1" value="6/9/2004" />
<input type="text" name="title.2" value="The Two Towers" />
<input type="text" name="author.2" value="JRR Tolkien" />
<input type="text" name="date.2" value="6/1/2005" />
<input type="submit" />
</form>
我如何从Spring MVC 3.0控制器解析它?您的控制器请求映射是否可以简单地将Spring作为参数,然后执行如下操作:
Map<String, String[]> params = request.getParameterMap();
int i = 0;
while ( true ) {
String title = params.get( "title" + .i );
if ( title != null ) {
// get the rest and create your Book object or whatever
i += 1;
}
else {
break;
}
}
<input type="text" name="books[0].title" value="Curious George" />
<input type="text" name="books[0].author" value="H.A. Rey" />
<input type="text" name="books[0].date" value="2/23/1973" />
Map params=request.getParameterMap();
int i=0;
while(true){
字符串title=params.get(“title”+.i);
如果(标题!=null){
//得到剩下的并创建您的Book对象或任何东西
i+=1;
}
否则{
打破
}
}
名称属性不必是唯一的。因此:
<input type="text" name="title" value="Curious George" />
<input type="text" name="title" value="Code Complete" />
<input type="text" name="title" value="The Two Towers" />
然后
@RequestMapping("/create")
public void create(
@RequestParam("title") List<String> titles,
@RequestParam("author") List<String> authors, ..) {..}
@RequestMapping(“/create”)
公共空间创建(
@RequestParam(“标题”)列表标题,
@RequestParam(“作者”)列出作者,…{…}
应根据以下要求,保持构件的顺序:
控件名称/值按它们在文档中的显示顺序列出。名称与值之间用“=”分隔,名称/值对之间用“&”分隔
如果您可以更改视图,理想情况下,您可以使用某种列表来执行此操作 比如:
Map<String, String[]> params = request.getParameterMap();
int i = 0;
while ( true ) {
String title = params.get( "title" + .i );
if ( title != null ) {
// get the rest and create your Book object or whatever
i += 1;
}
else {
break;
}
}
<input type="text" name="books[0].title" value="Curious George" />
<input type="text" name="books[0].author" value="H.A. Rey" />
<input type="text" name="books[0].date" value="2/23/1973" />
最后,您的请求映射方法将有一个@modeldattribute参数:
@RequestMapping
public void handlePost(@ModelAttribute("container") BookContainer container) {
}
spring会自动向您的列表中添加您需要的任意数量的“书籍”。我今天尝试了很长一段时间,希望这个想法能够顺利实现。我甚至删除了我的大部分代码,把你的代码放进去了。关于如何让它真正工作,有什么建议或建议吗?您使用的是哪个版本的SpringMVC?我记得在3.0.0中有一个bug,[]不起作用。我目前正在使用3.0.5-稍后我也会对此进行一次测试,以检查我是否遗漏了任何内容。我已经更新了我的答案,它不起作用的主要原因是您似乎无法直接绑定回列表,但如果您的列表包含在另一个类中,则效果很好。谢谢kieron。我也在3.0.5上。我今晚会看一看,看能否成功。这将是非常好的,因为它比我刚刚得到WebRequest的答案更简洁。最后,现在您的ModelAttribute是“container”,但在您的requestmapping中您仍然引用“books”,这是您想要的吗?此外,输入元素的名称是否需要更改为container.books[0].title等?