springMVC的参数绑定方式
来源:互联网 发布:知敬畏 书法 编辑:程序博客网 时间:2024/06/03 22:02
1.接收数组
页面
<script type="text/javascript"> $(document).ready(function(){ var ids = new Array(); ids.push(341); ids.push(345); $.ajax({ type:"POST", url:"/web/msg/u", dataType:"json", data:{ids:ids}, success:function(data){ } }); }); </script>
java
@RequestMapping(value = "/u", method = RequestMethod.POST)@ResponseBodypublic void getUsers(@RequestParam("ids[]")List<Long> ids, HttpServletRequest request, HttpServletResponse response) {}
2.通过@PathVariabl注解获取路径中传递参数
JAVA
@RequestMapping(value = "/{id}/{str}") public ModelAndView helloWorld(@PathVariable String id, @PathVariable String str) { System.out.println(id); System.out.println(str); return new ModelAndView("/helloWorld");}
3.用注解@RequestParam绑定请求参数a到变量a
当请求参数a不存在时会有异常发生,可以通过设置属性required=false解决,
例如: @RequestParam(value=”a”, required=false)
JAVA
@RequestMapping(value = "/requestParam", method = RequestMethod.GET)public String setupForm(@RequestParam("a") String a, ModelMap model) { System.out.println(a); return "helloWorld";}
4.自定义复合对象类型
public class ContactInfo { private String tel; private String address;}public class User { private String firstName; private String lastName; private ContactInfo contactInfo;}
Controller代码:
@RequestMapping("saysth.do")public void test(User user) { System.out.println(user.getFirstName()); System.out.println(user.getLastName()); System.out.println(user.getContactInfo().getTel()); System.out.println(user.getContactInfo().getAddress());}
表单代码:
<form action="saysth.do" method="post"> <input name="firstName" value="张" /><br> <input name="lastName" value="三" /><br> <input name="contactInfo.tel" value="13809908909" /><br> <input name="contactInfo.address" value="北京海淀" /><br> <input type="submit" value="Save" /></form>
User对象中有ContactInfo属性,Controller中的代码和第3点说的一致,但是,在表单代码中,需要使用“属性名(对象类型的属性).属性名”来命名input的name。
- List绑定
Model代码:
public class User { private String firstName; private String lastName;}public class UserListForm { private List<User> users;}
Controller代码:
@RequestMapping("saysth.do")public void test(UserListForm userForm) { for (User user : userForm.getUsers()) { System.out.println(user.getFirstName() + " - " + user.getLastName()); }}
表单代码:
<form action="saysth.do" method="post"> <table> <thead> <tr> <th>First Name</th> <th>Last Name</th> </tr> </thead> <tfoot> <tr> <td colspan="2"><input type="submit" value="Save" /></td> </tr> </tfoot> <tbody> <tr> <td><input name="users[0].firstName" value="aaa" /></td> <td><input name="users[0].lastName" value="bbb" /></td> </tr> <tr> <td><input name="users[1].firstName" value="ccc" /></td> <td><input name="users[1].lastName" value="ddd" /></td> </tr> <tr> <td><input name="users[2].firstName" value="eee" /></td> <td><input name="users[2].lastName" value="fff" /></td> </tr> </tbody> </table></form>
其实,这和第4点User对象中的contantInfo数据的绑定有点类似,但是这里的UserListForm对象里面的属性被定义成List,而不是普通自定义对象。所以,在表单中需要指定List的下标。值得一提的是,Spring会创建一个以最大下标值为size的List对象,所以,如果表单中有动态添加行、删除行的情况,就需要特别注意,譬如一个表格,用户在使用过程中经过多次删除行、增加行的操作之后,下标值就会与实际大小不一致,这时候,List中的对象,只有在表单中对应有下标的那些才会有值,否则会为null,看个例子:
表单代码:
<form action="saysth.do" method="post"> <table> <thead> <tr> <th>First Name</th> <th>Last Name</th> </tr> </thead> <tfoot> <tr> <td colspan="2"><input type="submit" value="Save" /></td> </tr> </tfoot> <tbody> <tr> <td><input name="users[0].firstName" value="aaa" /></td> <td><input name="users[0].lastName" value="bbb" /></td> </tr> <tr> <td><input name="users[1].firstName" value="ccc" /></td> <td><input name="users[1].lastName" value="ddd" /></td> </tr> <tr> <td><input name="users[20].firstName" value="eee" /></td> <td><input name="users[20].lastName" value="fff" /></td> </tr> </tbody> </table></form>
这个时候,Controller中的userForm.getUsers()获取到List的size为21,而且这21个User对象都不会为null,但是,第2到第19的User对象中的firstName和lastName都为null。
6.Set绑定
Set和List类似,也需要绑定在对象上,而不能直接写在Controller方法的参数中。但是,绑定Set数据时,必须先在Set对象中add相应的数量的模型对象。
Model代码:
public class User { private String firstName; private String lastName;}public class UserSetForm { private Set<User> users = new HashSet<User>(); public UserSetForm() { users.add(new User()); users.add(new User()); users.add(new User()); }}
Controller代码:
@RequestMapping("saysth.do")public void test(UserSetForm userForm) { for (User user : userForm.getUsers()) { System.out.println(user.getFirstName() + " - " + user.getLastName()); }}
表单代码:
<form action="saysth.do" method="post"> <table> <thead> <tr> <th>First Name</th> <th>Last Name</th> </tr> </thead> <tfoot> <tr> <td colspan="2"><input type="submit" value="Save" /></td> </tr> </tfoot> <tbody> <tr> <td><input name="users[0].firstName" value="aaa" /></td> <td><input name="users[0].lastName" value="bbb" /></td> </tr> <tr> <td><input name="users[1].firstName" value="ccc" /></td> <td><input name="users[1].lastName" value="ddd" /></td> </tr> <tr> <td><input name="users[2].firstName" value="eee" /></td> <td><input name="users[2].lastName" value="fff" /></td> </tr> </tbody> </table></form>
基本和List绑定类似。
需要特别提醒的是,如果最大下标值大于Set的size,则会抛出org.springframework.beans.InvalidPropertyException异常。所以,在使用时有些不便。
- Map绑定:
Map最为灵活,它也需要绑定在对象上,而不能直接写在Controller方法的参数中。
Model代码:
public class User { private String firstName; private String lastName;}public class UserMapForm { private Map<String, User> users;}
Controller代码:
@RequestMapping("saysth.do")public void test(UserMapForm userForm) { for (Map.Entry<String, User> entry : userForm.getUsers().entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue().getFirstName() + " - " + entry.getValue().getLastName()); }}
表单代码:
<form action="saysth.do" method="post"> <table> <thead> <tr> <th>First Name</th> <th>Last Name</th> </tr> </thead> <tfoot> <tr> <td colspan="2"><input type="submit" value="Save" /></td> </tr> </tfoot> <tbody> <tr> <td><input name="users['x'].firstName" value="aaa" /></td> <td><input name="users['x'].lastName" value="bbb" /></td> </tr> <tr> <td><input name="users['y'].firstName" value="ccc" /></td> <td><input name="users['y'].lastName" value="ddd" /></td> </tr> <tr> <td><input name="users['z'].firstName" value="eee" /></td> <td><input name="users['z'].lastName" value="fff" /></td> </tr> </tbody> </table></form>
- springMVC的参数绑定方式
- SpringMVC的各种参数绑定方式
- SpringMVC的各种参数绑定方式
- SpringMVC的各种参数绑定方式
- SpringMVC的各种参数绑定方式
- SpringMVC的各种参数绑定方式
- SpringMVC的各种参数绑定方式
- SpringMVC的各种参数绑定方式
- springMVC各种参数的绑定方式
- SpringMVC的各种参数绑定方式
- SpringMVC的各种参数绑定方式
- SpringMVC的参数绑定方式之一
- SpringMVC的各种参数绑定方式
- SpringMVC的各种参数绑定方式
- SpringMVC的各种参数绑定方式
- SpringMVC的各种参数绑定方式
- SpringMVC的各种参数绑定方式-1
- SpringMVC的各种参数绑定方式
- VI的操作命令和重复动作的命令(2)
- 基于Matlab的多层BP神经网络在非线性函数拟合中的应用
- JSP总结(经典)
- MSP430定时器的使用
- 制作 alipay-sdk-java包到本地仓库
- springMVC的参数绑定方式
- c++ map的排序问题
- Leetcode 100. Same Tree
- js学习笔记:String中的模式匹配
- java简介
- 一些框架设计上的相关点
- VS2012 代码格式化工具:AStyle和CoolFormat
- 第0节-斯坦福cs229机器学习笔记
- 经验分享之SVN禁止删除和强制注释操作的钩子脚本pre-commit