码迷,mamicode.com
首页 > 编程语言 > 详细

Springmvc中 同步/异步请求参数的传递以及数据的返回

时间:2015-04-02 10:32:14      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:

  注意: 这里的返回就是返回到jsp页面

**** controller接收前台数据的方式,以及将处理后的model 传向前台*****

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

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

@RequestMapping(value="/select")

PublicString  select(String name,int age,Model model){

// 这样这里的name,age 就是我们前台传递的参数,也是我们Javabean中的属性。

// 这样就可以向前台传值

model.addAttribute("user",user);

Return"list";

}

}

(2)、使用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";

}


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

}

 

(4)、这种方式和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";

}

 

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

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

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

@RequestMapping(value="select")

// 使用model 向前台传对象

PublicString  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两个值

           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}]};

  /* 将字符串转化为 javascript 对象 */

  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对象格式的数据

Stringstring =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());

}

 

 

 

Springmvc中 同步/异步请求参数的传递以及数据的返回

标签:

原文地址:http://blog.csdn.net/qh_java/article/details/44802287

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!