spring mvc 前后端数据交互方式(整理)
Form表单提交
基本数据类型
@requestMapping(“method.do(请求路径名)”)
Public void test(int count){}
表单中的name值必须和controller的参数变量名保持一致。
如果不一致可以使用@RequestParam()注解绑定请求参数
如果页面传递的参数为“”或者null会报错,
包装类型
和基本类型使用方法相同。
如果前台的传递的值为null或者“”则controller中对应的变量值为null;
自定义复合对象类型
所需信息封装成一个自定义的对象,变量名需要和表单中的name名称相同,
User对象中有ContactInfo属性,在表单代码中,需要使用“属性名(对象类型的属性).属性名”来命名input的name。
list绑定
Controller方法中不能直接使用list参数。不能像下面这么写,会报错。Could not instantiate bean class [java.util.List]: Specified class is an interface
使用list传递参数的时候,
缺点:那么名称易错。当需要单独传递一个list的时候很麻烦
set绑定
Set和list一样需要绑定到对象上才能够传递。
而且,在对象中必须要添加相应数量的模型对象。传多少个就要添加多少个user对象。
接受数据方式:
缺点;比list更麻烦。
map绑定
Map比较灵活,它也需要绑定在对象上,而不能直接写在Controller方法的参数中。
绑定对象:
接收数据:
提醒
添加Required=false 表示如果参数a为空或者null,不抛出异常。
使用pojo方式接收参数,前台属性的name值,需要和javabean中的属性名一致。Model 用来向前天发送数据。
多选框传值:
如果前台有相同name值的数据传递则要使用数组来接收,相同名称的可能是有这样的数值但更多的是多选框,所以我们要使用数组来接收这样的值
@RequestMapping(value="select.do")
public Stringhello(String []username,Model model){
System.out.println(username.length)
Stringname1=username[0];
Stringname2=username[1];
model.addAttribute("helloworld", "hello"+name1+name2);
return"welcome";
}
httpservletRequest获取前台传递的参数:
@RequestMapping(value="/hello.do")
publicString hello(HttpServletRequest request,Model model){
String name=request.getParameter("name");
System.out.println(name);
model.addAttribute("helloworld","hello"+name);
return"welcome";
}
向前台发送参数:
传递对象:
传递list集合:
在modelandview对象中添加数据:
使用map。跟model方法类似。
异步传参方法:
前台发送:
$.ajax({
url:"selectinfo.do",
type:"post",
data:{name:"name1",age:2},
dataType:"json",
success:function(data){
arr=eval(data);
alert("长度"+arr.length);
alert(arr);
for(var i=0;i<arr.length;i++){
alert("内容"+arr[i].title);
}
}
});
接收方式:
使用request接收
直接用变量参数接收
用javabean对象接收