springmvc前台向后台传值几种方式总结(从简单到复杂)
1. 基本数据类型(以int为例,其他类似):
成都创新互联公司公司2013年成立,先为木垒哈萨克等服务建站,木垒哈萨克等地企业,进行企业商务咨询服务。为木垒哈萨克企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
Controller代码:
@RequestMapping("saysth.do") public void test(int count) { }
表单代码:
表单中input的name值和Controller的参数变量名保持一致,就能完成数据绑定,如果不一致可以使用@RequestParam注解。需要注意的是,如果Controller方法参数中定义的是基本数据类型,但是从页面提交过来的数据为null或者”"的话,会出现数据转换的异常。
也就是必须保证表单传递过来的数据不能为null或”",所以,在开发过程中,对可能为空的数据,最好将参数数据类型定义成包装类型,具体参见下面的例子。
2. 包装类型(以Integer为例,其他类似):
Controller代码:
@RequestMapping("saysth.do") public void test(Integer count) { }
表单代码:
和基本数据类型基本一样,不同之处在于,表单传递过来的数据可以为null或”",以上面代码为例,如果表单中num为”"或者表单中无num这个input,那么,Controller方法参数中的num值则为null。
3. 自定义对象类型:
Model代码:
public class User { private String firstName; private String lastName; 省略set,get 方法 }
Controller代码:
@RequestMapping("saysth.do") public void test(User user) { }
表单代码:
非常简单,只需将对象的属性名和input的name值一一匹配即可。
4. 自定义复合对象类型:
Model代码:
public class ContactInfo { private String tel; private String address; 省略set ,get } public class User { private String firstName; private String lastName; private ContactInfo contactInfo; 省略set ,get }
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()); }
表单代码:
User对象中有ContactInfo属性,Controller中的代码和第3点说的一致,但是,在表单代码中,需要使用“属性名(对象类型的属性).属性名”来命名input的name。
5. List绑定:
List需要绑定在对象上,而不能直接写在Controller方法的参数中。
Model代码:
public class User { private String firstName; private String lastName; 省略set ,get } public class UserListForm { private Listusers; public List getUsers() { return users; } public void setUsers(List users) { this.users = users; } }
Controller代码:
@RequestMapping("saysth.do") public void test(UserListForm userForm) { for (User user : userForm.getUsers()) { System.out.println(user.getFirstName() + " - " + user.getLastName()); } }
表单代码: