zoukankan      html  css  js  c++  java
  • springmvc中同步/异步请求参数的传递以及数据的返回

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

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

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

    }

  • 相关阅读:
    [转]asp.net页面缓存技术
    UL和LI在div中的高度的IE6下兼容性
    jquery制作的横向图片滚动带横向滚动条TackerScroll
    电脑可以上网,但是qq登陆不上去?
    Introduction to discrete event system学习笔记4.6
    Introduction to Discrete event system学习笔记4.9
    Introduction to discrete event systemsstudy 4.5
    Symbolic synthesis of obserability requirements for diagnosability B.Bittner,M.Bozzano,A.Cimatti,and X.Olive笔记4.16
    Introduction to discrete event system学习笔记4.8pm
    Introduction to discrete event system学习笔记 4.8
  • 原文地址:https://www.cnblogs.com/yadongliang/p/5359794.html
Copyright © 2011-2022 走看看