@InitBinder("user") public void initUser(WebDataBinder binder){ binder.setFieldDefaultPrefix("user."); } @InitBinder("admin") public void initAdmin(WebDataBinder binder){ binder.setFieldMarkerPrefix("admin."); } 此时发送请求:http://localhost:8080/list?user.name=xiaoshu&user.address=home 得到:User{id=null, name='xiaoshu', address='home'}Admin{name='null', address='null'} 可以看到带user.前缀的参数只绑定到了user对象中 那如果试一下没有配置@InitBinder时用user.和admin.作为前缀进行请求发送 请求:http://localhost:8080/list?user.name=xiaoshu&user.address=home&admin.name=xiaozhang&admin.address=hangzhou 响应:User{id=null, name='null', address='null'}Admin{name='null', address='null'} 发现都是为空,参数未能成功绑定 结论:进行同属性参数绑定时,要区分绑定时需在属性前加上对象前缀,并在controller中配置@InitBinder来明确哪个前缀的属性绑定到哪个对象中 没有配置@InitBinder加前缀不能成功绑定6、List绑定

@RequestMapping("/list") @ResponseBody public AdminList getUser(AdminList adminList){ return adminList; }请求::8080/list?admins[0].name=xiaoshu&admins[1].name=xiaozhang
响应:
{"admins":[{"name":"xiaoshu","address":null},{"name":"xiaozhang","address":null}]}结论:这里不能直接用List去绑定,而是要创建一个类类中创建一个List去绑定,AdminList中创建了一个ArrayList。
7、Map绑定
@RequestMapping("/map") @ResponseBody public AdminMap getMap(AdminMap adminMap){ return adminMap; }AdminMap中维护了一个Hashmap
请求::8080/map?admins['X'].name=xiaoshu&admins['Y'].name=xiaozhang
响应:
{"admins":{"Y":{"name":"xiaozhang","address":null},"X":{"name":"xiaoshu","address":null}}}
结论:map存放可以保证key的唯一性,过滤冲重复数据
8.重点介绍表单多对象传递的绑定(特别是多对象的属性名相同的情况):
问题出现
要在一张表单中提交多个对象,并且还要在后台Controller 中精准的绑定接收。可是,这些对象中的参数名可能相同,后台接收入参时无法像struts那样jsp表单中使用Object.Param形式对表单进行精准绑定入参,我们都知道struts2默认就是这种方案,这是因为struts2采用了OGNL,并通过栈(根对象)进行操作的,而且栈中默认有action实例,所以很自然的没有这种问题。mvc参数传值另一方面说,Struts用这种方式绑定入参,却牺牲了性能。虽然springmvc不能像struts那样方便的很直接的入参绑定,当然,spring多对象绑定入参也提供了方法。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-65226-2.html
咋回去呢