在@RequestParam中绑定列表

我以这种方式从一个表单发送一些参数:

myparam[0] : 'myValue1' myparam[1] : 'myValue2' myparam[2] : 'myValue3' otherParam : 'otherValue' anotherParam : 'anotherValue' ... 

我知道我可以通过添加一个参数来获得控制器方法中的所有参数

 public String controllerMethod(@RequestParam Map<String, String> params){ .... } 

我想绑定参数myParam [](而不是其他的)到一个列表或数组(任何保持索引顺序),所以我尝试了一个语法,如:

 public String controllerMethod(@RequestParam(value="myParam") List<String> myParams){ .... } 

 public String controllerMethod(@RequestParam(value="myParam") String[] myParams){ .... } 

但没有一个绑定myParams。 即使我向地图添加一个值,也不能绑定参数:

 public String controllerMethod(@RequestParam(value="myParam") Map<String, String> params){ .... } 

有没有任何语法来绑定一些参数列表或数组,而不必创build一个对象作为@ModelAttribute与列表属性在它?

谢谢

@RequestParam中的数组用于绑定几个同名的参数:

 myparam=myValue1&myparam=myValue2&myparam=myValue3 

如果你需要绑定@ModelAttribute -style索引参数,我想你无论如何都需要@ModelAttribute

或者你可以这样做:

 public String controllerMethod(@RequestParam(value="myParam[]") String[] myParams){ .... } 

这适用于像这样的forms:

 <input type="checkbox" name="myParam[]" value="myVal1" /> <input type="checkbox" name="myParam[]" value="myVal2" /> 

这是最简单的解决scheme:)

有一种方法可以完成这个任务(以一种黑客的方式),为List创build一个包装类。 喜欢这个:

 class ListWrapper{ List<String> myList; // getters and setters } 

那么你的控制器方法签名将如下所示:

 public String controllerMethod(ListWrapper wrapper){ .... } 

如果您在请求中传递的集合名称与包装类的集合字段名称相匹配,则无需使用@RequestParam或@ModelAttribute注释,在我的示例中,您的请求参数应如下所示:

 myList[0] : 'myValue1' myList[1] : 'myValue2' myList[2] : 'myValue3' otherParam : 'otherValue' anotherParam : 'anotherValue' 

只要补充Donal Fellows说的,你可以使用带有@RequestParam的List

 public String controllerMethod(@RequestParam(value="myParam") List<ObjectToParse> myParam){ .... } 

希望能帮助到你!

如果method = RequestMethod.GET那么订阅什么罗勒说在评论本身的问题本身,那么你可以使用@RequestParam List groupVal。

然后用params列表调用服务就像下面这样简单:

 API_URL?groupVal=kkk,ccc,mmm 

用下面的checkbox切换隐藏的字段值…

HTML:

 <input type='hidden' value='Unchecked' id="deleteAll" name='anyName'> <input type="checkbox" onclick="toggle(this)"/> Delete All 

脚本:

 function toggle(obj) {`var $input = $(obj); if ($input.prop('checked')) { $('#deleteAll').attr( 'value','Checked'); } else { $('#deleteAll').attr( 'value','Unchecked'); } }