• SpringMVC之数据传递一


    之前的博客中也说了,mvc中数据传递是最主要的一部分,从url到Controller、从view到Controller、Controller到view以及Controller之间的数据传递。今天主要学习数据传递到Controller的几种方式.

    一、从url传递

    1.@RequestParam的使用

    常见的url中会是?name=XXX&pwd=XXX的这种,如果想获取name,pwd,可以使用.@RequestParam。假如参数是可选参数,可以设置required=false,默认是true,value也要与url的对应。

        @RequestMapping(value="/index.do")
        public ModelAndView login(HttpServletRequest request,HttpServletResponse response,@RequestParam("name")String name,@RequestParam(value="pwd",required=false) String pwd){
            ModelAndView modelAndView = new ModelAndView("Index");
            System.out.println("name:"+name+" pwd:"+pwd);
            return modelAndView;
            }

    2.@PathVariable的使用

    有的url的格式是url/param1/param2这种,这种获取值可以使用.@PathVariable。

        @RequestMapping(value="/login/{name}/{pwd}",method=RequestMethod.GET)
        public ModelAndView login1(HttpServletRequest request,HttpServletResponse response,@PathVariable("name") String name,@PathVariable("pwd") String pwd){
            ModelAndView modelAndView = new ModelAndView("Index"); 
            System.out.println("name:"+name+" pwd:"+pwd);
            return modelAndView;
            }

     

    上面两种传递值得方式也打印出了日志.第一个打印出了name,密码为null,第二种方式打印了name和pwd.

    二、从view传递

    这里主要用form表单演示。

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    <form id="form1" name="myform" method="post" action="../../login.do" >
          用户:<input type="text" name="name"/>
          密码:<input type="password" name="pwd"/>
          <input type="submit"/>
     </form>
    </body>
    </html>
    View Code

    1.直接将请求参数名作为Controller中方法的形参

    这里在Controller中设置参数是页面form表单控件的name属性。

        @RequestMapping(value="/login.do",method=RequestMethod.POST)
        public ModelAndView login2(HttpServletRequest request,HttpServletResponse response,String name,String pwd){
            ModelAndView modelAndView = new ModelAndView("Index"); 
            System.out.println("name:"+name+" pwd:"+pwd);
            return modelAndView;
            }

    2.使用Pojo对象(就是封装的类,类中封装的字段作为参数)绑定请求参数值,原理是利用Set的页面反射机制找到User对象中的属性

    这个使用pojo有点类似之前学的,我们可以定义一个User类,然后Controller的参数类型是User.form表单的action这里要注意下要设置成action="../../login3.do".

    package com.cyw.web.model;
    
    public class User {
        private String name;
        private String pwd;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPwd() {
            return pwd;
        }
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    
    
    }
    View Code
        @RequestMapping(value="/login3.do")
        public ModelAndView login3(HttpServletRequest request,HttpServletResponse response,User user){
            ModelAndView modelAndView = new ModelAndView("Index"); 
            System.out.println("name:"+user.getName()+" pwd:"+user.getPwd());
            return modelAndView;
            }

    3.使用原生的Servlet API 作为Controller 方法的参数

    不仅是通过view传到Controller,url传参数到Controller也一样.既然有HttpServletRequest,我们可以通过request对象获取相关参数。

            String username=request.getParameter("name");
            System.out.println("username:"+username);

    4.传递数组

    <form id="form1" name="myform" method="post" action="../../login.do" >
       <input type="checkbox" name="hobby" value="1" />跑步
        <input type="checkbox" name="hobby" value="2" />游泳
        <input type="checkbox" name="hobby" value="3" />麻将
        <input type="checkbox" name="hobby" value="4" /><input type="submit"/>
     </form>
    </body>
    </html>
        @RequestMapping(value="/login.do",method=RequestMethod.POST)
        public ModelAndView login2(HttpServletRequest request,HttpServletResponse response,String[] hobby){
            ModelAndView modelAndView = new ModelAndView("Index"); 
            for(int i=0;i<hobby.length;i++)
            {
                System.out.println("hobby:"+hobby[i]);
            }
            return modelAndView;
            }

    4.时间传递

    只需要在Controller中增加InitBinder然后页面传的时间格式需要与dateFormat 的一致。

        @InitBinder
        protected void init(HttpServletRequest request, ServletRequestDataBinder binder) {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");
            dateFormat.setLenient(false);
            binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
        }
    <form id="form1" name="myform" method="post" action="../../login.do" >
          用户:<input type="text" name="name"/>
          密码:<input type="password" name="pwd"/>
          出生日期:<input type="date" name="birthday"/>
          <input type="submit"/>
     </form>

    这里设置出生日期的type=date,可以在页面选择时间。然后在Controller中获取

        @RequestMapping(value="/login.do",method=RequestMethod.POST)
        public ModelAndView login2(HttpServletRequest request,HttpServletResponse response,String name, String pwd,Date birthday){
            ModelAndView modelAndView = new ModelAndView("Index"); 
            System.out.println("name:"+name+" pwd:"+pwd+" birthday:"+birthday);
            return modelAndView;
            }

    三、小结

    今天主要介绍了往Controller传参数的几种方法,在以后的博客中会介绍Controller向view传递数据等内容。

  • 相关阅读:
    crypto 密码加密
    -webkit-box 高度自动填满
    performance数据
    AJAX
    Javascript sort方法
    Javascript reduce方法
    如何让div内的多行文本上下左右居中
    js基础
    for循环的执行顺序
    json对象和json字符串
  • 原文地址:https://www.cnblogs.com/5ishare/p/8734825.html
Copyright © 2020-2023  润新知