Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将表单字段集合发布到Spring控制器?_Java_Spring_Spring Mvc - Fatal编程技术网

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等?