1、前台传递数据的接受:传的属性名和javabean的属性相同

(1)、使用基本类型,或引用类型进行接受

@RequestMapping(value="/select")
PublicString  select(String name,int age,Model model){
// 这样这里的name,age 就是我们前台传递的参数,也是我们Javabean中的属性。
  System.out.println("name"+name+"age "+age);
 model.addAttribute("user",user);
 Return"list";
   }
 }

 

(2)、用注解@RequestParam绑定请求参数

用注解@RequestParam绑定请求参数a到变量a

当请求参数a不存在时会有异常发生,可以通过设置属性required=false解决,

例如:

@RequestParam(value="a",required=false)

Controller如下

// 这种方式是参数a必须是存在的,如果不存在报异常,如果@RequestParam(value='a') 不给required 赋值的话,就默认为true
@RequestMapping(value= "/requestParam", method =RequestMethod.GET/POST)
public StringsetupForm(@RequestParam("a") String a,ModelMap model) {
    System.out.println(a); 
return "helloWorld"; } 
   
// 这种方式是请求参数a不是一定要存在,如果存在就赋值,如果不存在也不会报异常
@RequestMapping(value= "/requestParam", method =RequestMethod.GET/POST)
public StringsetupForm(@RequestParam(value="a",required=false) String a,ModelMap model) {
    System.out.println(a); 
return "helloWorld"; }




(3)、使用pojo方式来接受:要求,前台属性的名称和javabean 的属性的名称一样。

// 这种方式使用的比较多
@RequestMapping(value="select")
PublicString  select(User user ,Model model){
Stringname= user.getName();
Stringage=user.getAge();
//  按照这些属性进行查询,之后将数据集合放到model中
LIst<Map<String,Object>> list=  new ArrayList<Map<String,Object>>();
list="按照条件查询的结果";
model.addAttribute("userlist",list);
Return"list";
}


(4)、使用pojo方式来接受:要求,前台属性的名称和javabean 的属性的名称一样。

JSP表单如下

<form method="post" action="hao.do">
     a: <input  id="a" type="text"  name="a"/>
     b: <input  id="b" type="text"  name="b"/>
     <input type="submit" value="Submit"/>
  </form>Java  Pojo如下
    public class Pojo{
         private String a;
         privateint b;
     }Java Controller如下
@RequestMapping(method= RequestMethod.POST) 
public StringprocessSubmit(@ModelAttribute("pojo") Pojo pojo) {
     
     return"helloWorld";
 }



(5)、如果前台有相同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";
}

 使用数组的方式接受多选框的内容

(6)、这种方式和servlet 接受请求参数的方式是相同的,因为springmvc 提供了servlet的api 所以我们可以使用HttpServletRequest request 来获取参数

@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";
}


(7)、通过@PathVariabl获取路径中的参数值


@RequestMapping(value="user/{id}/{name}",method=RequestMethod.GET/POST)
    public String printMessage1(@PathVariable String id,@PathVariableString name, ModelMap model) {
         System.out.println(id);
         System.out.println(name);
         model.addAttribute("message","111111");
         return"users";
     }

例如,访问user/123/whd路径时,执行以上方法,其中,参数id=123,name=whd

@RequestMapping(value="user/{id}/{name}")其中的{id}/{name}就是占位符,这样和路径能完整对应,之后通过方法中的注解从请求路径中获取这些站位符位置的值。



**** 都看到了我们上面列举了参数接受方式,但是我们发现处理后的model(数据模型)的接受都是使用Model 这个对象来传的,这也是推存使用的,但还有其他方式,其实不管使用那种方式技术实现都是一样的,参数传递具体方式:******

2、 将数据模型向前台传值:

 (1)、向前台传递一个bean或基本类型的值

@RequestMapping(value="select")
// 使用model 向前台传对象
Public String  select(User user ,Model model){
Stringname= user.getId();
//  按照这些属性进行查询,之后将数据放到model中
User  user="按照id获取的数据"
model.addAttribute("user",user);
Return"list";
}
 
(2)、向前台传list集合
 @RequestMapping(value="/hello.do")
public String hello(User user,Modelmodel){
  List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
  Map<String,Object> map1= newHashMap<String,Object>();
  Map<String,Object> map2= newHashMap<String,Object>();
  map1.put("name","name1");
  map1.put("age", 1);
  map2.put("name","name2");
  map2.put("age", 2);
  list.add(map1);
  list.add(map2);
//  将list集合放在model中,在前台获取这个集合并进行遍历
model.addAttribute("ulist",list);
return"welcome";
}
 
前台使用c标签
<c:forEach   items="${ulist}"  var="user" >
   ${user.name}
     ${user.age}
</c:forEach>

****前面的几种都使用了model来传值,这也是比较推存的方式,但还有几种方式在这里给大家列出来:

(3)、ModelAndView  从字面意思我们就能看出这个对象包括,数据模型和视图名称

Public ModelAndView  select(User user){
ModelAndView    mav=new  ModelAndView    ("view_value");
// view 可以按照上面的这样写,也可以按照下面这样写,也就是view的两种赋值方式
// mav.setViewName("view_value"); 指定视图名
mav.addObject("key1",value);
mav.addObject("key2",value);
  return modelAndView ;
}

(4)、使用map 来存储model 然后向前台传值

@RequestMapping(value="/hello.do")
public String hello(User user,Map<String,Object>  map){
  List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
  Map<String,Object> map1= newHashMap<String,Object>();
  Map<String,Object> map2= newHashMap<String,Object>();
  map1.put("name","name1");
  map1.put("age", 1);
  map2.put("name","name2");
  map2.put("age", 2);
  list.add(map1);
  list.add(map2);
//  将list集合放在model中,在前台获取这个集合并进行遍历,map和model是很相似的。
map.addAttribute("ulist",list);
return"welcome";
}

 

*************上面都是同步请求的,下面我们看看ajax异步请求数据的传递和接收*************

  • ajax请求向后台传值,前台传一般值
  • ajax请求向后台,前台传json数组格式的值

1、ajax 请求向后台传值一般格式的值,一般格式也就是jsonObject 格式的数据

$.ajax({ 
            url:"selectinfo.do",  
            type:"post",  
         // data 就是向后台传递的值,有name和age两个值,而这里传的是Json对象,这个jquery会帮你转换为键值对的格式,就是xx=xx&xxxx=xxxxx...
         //有些时候调用webservice的方法,需要json格式的字符串,所以不能传递json对象,而是json格式的字符串,所以要传递字符串
           data:{name:"name1",age:2}, 
          //  规定返回值的类型,这里是json格式返回
            dataType:"json",
          // data 为后台传过来的值
            success:function(data){  
            // 在后台传的是一个jsonarray这里使用eval函数进行遍历
             arr=eval(data);
             alert("长度"+arr.length);
             alert(arr);
             for(var i=0;i<arr.length;i++){
              alert("内容"+arr[i].title);
             }
            } 
            });

后台接受,这里数据的接受和前面说的数据的接收是相同的,即可以使用 request,变量,Javabean 等来接收

(1)、使用request 接收

@RequestMapping(value="selectinfo.do",method=RequestMethod.POST)
public void  selectinfo(HttpServletRequest  request,HttpServletResponse   response){
Stringname= request.getParameter("name");
Stringage= request.getParameter("age");
System.out.println("v"+name);
System.out.println("v"+age);
List<Map<String,Object>>list= new ArrayList<Map<String,Object>>();
Map<String,Object>map1= new HashMap<String,Object>();
Map<String,Object>map2= new HashMap<String,Object>();
Map<String,Object>map3= new HashMap<String,Object>();
map1.put("title","map1");
map1.put("artist","ADG3");
map1.put("mp3","musics/zjh.mp3");
map1.put("poster","images/m0.jpg");
map2.put("title","map2");
map2.put("artist","ADG3");
map2.put("mp3","musics/zhm.mp3");
map2.put("poster","images/m0.jpg");
map3.put("title", "暖心");
map3.put("artist","ADG3 Studios");
map3.put("mp3","musics/zhm.mp3");
map3.put("poster","images/m0.jpg");
list.add(map1);
list.add(map2);
list.add(map3);
// 转化为 json数组
JSONArraystr=JSONArray.fromObject(list);
try {   
//  向前台输出值,获取PrintWriter 对象
PrintWriterout= response.getWriter();
// 将数据输出到 ajax的success函数中的data这个值
   out.print(str.toString());
}catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(str.toString());
}

 

(2)、使用 变量String name  int age 来接收

@RequestMapping(value="selectinfo.do",method=RequestMethod.POST)
public void  selectinfo(String name,int age,HttpServletResponse  response){
Stringname= request.getParameter("name");
Stringage= request.getParameter("age");
System.out.println("v"+name);
System.out.println("v"+age);
List<Map<String,Object>>list= new ArrayList<Map<String,Object>>();
Map<String,Object>map1= new HashMap<String,Object>();
Map<String,Object>map2= new HashMap<String,Object>();
Map<String,Object>map3= new HashMap<String,Object>();
map1.put("title","map1");
map1.put("artist","ADG3");
map1.put("mp3","musics/zjh.mp3");
map1.put("poster","images/m0.jpg");
map2.put("title","map2");
map2.put("artist","ADG3");
map2.put("mp3","musics/zhm.mp3");
map2.put("poster","images/m0.jpg");
map3.put("title", "暖心");
map3.put("artist","ADG3 Studios");
map3.put("mp3","musics/zhm.mp3");
map3.put("poster","images/m0.jpg");
list.add(map1);
list.add(map2);
list.add(map3);
// 转化为json数组
JSONArraystr=JSONArray.fromObject(list);
try{
            // 获取PrintWriter 对象
PrintWriterout= response.getWriter();
// 输出数据
   out.print(str.toString());
}catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(str.toString());
}
 
(3)、使用javabean 来接接收 
@RequestMapping(value="selectinfo.do",method=RequestMethod.POST)
public void  selectinfo(User user,HttpServletResponse   response){
System.out.println("v"+user.getName());
System.out.println("v"+user.getId());
List<Map<String,Object>>list= new ArrayList<Map<String,Object>>();
Map<String,Object>map1= new HashMap<String,Object>();
Map<String,Object>map2= new HashMap<String,Object>();
Map<String,Object>map3= new HashMap<String,Object>();
map1.put("title","map1");
map1.put("artist","ADG3");
map1.put("mp3","musics/zjh.mp3");
map1.put("poster","images/m0.jpg");
map2.put("title","map2");
map2.put("artist","ADG3");
map2.put("mp3","musics/zhm.mp3");
map2.put("poster","images/m0.jpg");
map3.put("title", "暖心");
map3.put("artist","ADG3 Studios");
map3.put("mp3","musics/zhm.mp3");
map3.put("poster","images/m0.jpg");
list.add(map1);
list.add(map2);
list.add(map3);
// 转化为json数组
JSONArraystr=JSONArray.fromObject(list);
try{
            // 获取PrintWriter 对象
PrintWriterout= response.getWriter();
// 输出数据
   out.print(str.toString());
}catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(str.toString());
}

 

2、ajax 请求向后台传json数组格式的值:

(1)、在前台ajax发送异步请求,传递数据的格式为jsonarray,具体代码如下:

<script type="text/javascript">
  var arr=null;
  $(document).ready(function(){
// jsonObject 中存放了一个jsonarray格式的数据
  varallMenu1={"datas":[{title:"title1",age:1},{title:"title2",age:2},{title:"title3",age:3}]};
 
   // data 就是向后台传递的值,有name和age两个值,而这里传的是Json对象,这个jquery会帮你转换为键值对的格式,就是xx=xx&xxxx=xxxxx...    
    //有些时候调用webservice的方法,需要json格式的字符串,所以不能传递json对象,而是json格式的字符串,所以要传递字符串
   /* 将json格式的JavaScript对象转化为json格式的字符串进行传递 */ 
var arrs = JSON.stringify(allMenu1);
 /* 发送异步请求,获取jsonarray 数据 */
  $.ajax({ 
            url:"selectinfo.do",  
            type:"post",  
            data:"val="+arrs,  
            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);
             }
            } 
            }); 
});
  </script>

 

(2)、后台接收前台传递的jsonarray数组格式的数据

 

@RequestMapping(value="selectinfo.do",method=RequestMethod.POST)
public void  selectinfo(HttpServletRequest  request,HttpServletResponse   response){
// 通过关键字获取的就是一个jsonobject对象格式的数据
String  string =request.getParameter("val"); 
JSONObject  json = new JSONObject();
// 将string 转化为 json
json=json.fromObject(string);
//这个jsonObject对象的key 就是datas 而value 就是一个jsonarray,通过关键子获取jsonarray
JSONArray  arr=(JSONArray)json.get("datas");
// 获取数组中的jsonobject数据
JSONObject  obj1= arr.getJSONObject(0);
JSONObject  obj2= arr.getJSONObject(1);
Stringname1=obj1.getString("title");
Stringname2=obj2.getString("title");
System.out.println("json数据1"+name1);
System.out.println("json数据2"+name2);
List<Map<String,Object>>list= new ArrayList<Map<String,Object>>();
Map<String,Object>map1= new HashMap<String,Object>();
Map<String,Object>map2= new HashMap<String,Object>();
Map<String,Object>map3= new HashMap<String,Object>();
map1.put("title","map1");
map1.put("artist","ADG3");
map1.put("mp3","musics/zjh.mp3");
map1.put("poster","images/m0.jpg");
map2.put("title","map2");
map2.put("artist","ADG3");
map2.put("mp3","musics/zhm.mp3");
map2.put("poster","images/m0.jpg");
map3.put("title", "暖心");
map3.put("artist","ADG3 Studios");
map3.put("mp3","musics/zhm.mp3");
map3.put("poster","images/m0.jpg");
list.add(map1);
list.add(map2);
list.add(map3);
// 将list集合转化为jsonarray数组
JSONArraystr=JSONArray.fromObject(list);
try {    // 其实ajax异步请求和同步请求最大的区别就是这里数据的输出,ajax异步请求数据的输出使用了打印输出流对象来将数据输出
PrintWriterout= response.getWriter();
   out.print(str.toString());
}catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(str.toString());
}