0

我需要这个控制器:

@RequestMapping("/path/to/my/app")
public String process(List<JavaBean> javaBeans){
    // Do something with the list
}

在客户端,我需要手动创建用户操作列表,就像这样

<form action="/path/to/my/app">
    <input name="javaBeans[0].field1"/>
    <input name="javaBeans[0].field2"/>
    <input name="javaBeans[0].field3"/>
    <br/>
    <input name="javaBeans[1].field1"/>
    <input name="javaBeans[2].field2"/>
    <input name="javaBeans[3].field3"/>
    <!-- and so forth -->
</form>

我的主要问题是我在控制器内收到空列表。我必须将它包装在另一个 javabean 中才能使代码正常工作。喜欢以下

public class BeanWrapper{
    private List<JavaBean> javaBeans;

    // Getter and setter
}

并在控制器中

@RequestMapping("/path/to/my/app")
public String process(BeanWrapper wrapper){
    List<JavaBean> list = wrapper.getJavaBeans();
    // Do something with the list
}

这个版本有效,但我不得不不必要地将我的列表包裹在一个对象周围。有办法吗?

提前致谢。

4

1 回答 1

0

你可以试试这个:

public String process(@RequestParam("javaBeans[]") List<JavaBean> javaBeans) {

更新:

javaBeans[1]Spring 默认绑定当前不支持使用索引 () 的语法。如评论中所述,您可以通过使用@RequestBody注释来解决此限制。

public String process(@RequestBody List<JavaBean> javaBeans)

这需要一个POST请求,以及以不同格式(例如 JSON)发送的数据或实现您自己的消息转换器。

于 2013-04-24T14:01:05.307 回答