zoukankan      html  css  js  c++  java
  • java之spring mvc之数据处理

     1. 页面中数据提交到 Controller 中如何处理

    a) 如果自定义 Controller 是实现 spring 的 Controller 的接口,那么可以通过 HttpServletRequest 来获取数据。

    b) 如果自定义的 Controller 没有实现 spring 的 Controller 的接口,那么可以通过在处理方法上,添加一个 HttpServletRequest 类型的参数,在请求被方法处理时, spring 会自动的将 HttpServletRequest 注入到该参数中。

    注意:以上两种方式均可以获取表单数据,但是获取的方式和 servlet 一致,那么在提交数据时,会自动将表单域中的值,直接注入给参数。

    c) 在处理方法上,直接声明参数,参数名称和表单中的域的名称一致,那么在提交数据时,会自动将表单域中的值,直接注入给参数。

    Jsp 页面

    <form action="login.do" method="post">
        username:<input type="text" name="username"/><br>
        password:<input type="password" name="password"/><br>
        <input type="submit" value="登录"/>
     </form>

    Controller 类

    @RequestMapping("/login.do")
        public ModelAndView login(String username,String password){
            ModelAndView mv = new ModelAndView();
            System.out.println("username="+username+"  	password="+password);
            if("siggy".equals(username)&&"1111".equals(password)){
                mv.addObject("msg", "登录成功!!!");
                mv.setViewName("index");
            }else{
                mv.setViewName("login");
            }
            return mv;
        }

    如果表单域中的名称和参数名不一致,可以使用 @RequestParam("username") 进行声明

    @RequestMapping("/login.do")
        public ModelAndView login(@RequestParam("username")String user,String password){
            ModelAndView mv = new ModelAndView();
            System.out.println("username="+user+"  	password="+password);
            if("siggy".equals(user)&&"1111".equals(password)){
                mv.addObject("msg", "登录成功!!!");
                mv.setViewName("index");
            }else{
                mv.setViewName("login");
            }
            return mv;
        }

    d) 对于提交对象的处理:

    如果在表单域中提交的是对象,那么域中的名称为 vo 类的属性名即可,vo 类中提供 get/set 方法,Controller 类中的处理方法上,直接将参数声明为 vo 类型的对象即可。

    vo 类型

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

    Jsp 页面

    <body>
        <form action="login.do" method="post">
        username:<input type="text" name="name"/><br>
        password:<input type="password" name="pwd"/><br>
        <input type="submit" value="登录"/>
        </form>
    </body>

    Controller 类

    @Controller
    public class UserController {
        @RequestMapping("/toLogin.do")
        public ModelAndView toLogin(){
            return new ModelAndView("login");
        }
        @RequestMapping("/login.do")
        public ModelAndView login(User user){
            ModelAndView mv = new ModelAndView();
            System.out.println("username="+user.getName()+"  	password="+user.getPwd());
            if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
                mv.addObject("msg", "登录成功!!!");
                mv.setViewName("index");
            }else{
                mv.setViewName("login");
            }
            return mv;
        }
    }

    2. 数据如何从后台响应到页面中

    a) 可以通过 ServletAPI 将数据携带到前台,和 servlet 处理是一致的。

    @RequestMapping("/login.do")
        public ModelAndView login(@RequestParam("username")String user,String password,HttpServletRequest req){
            ModelAndView mv = new ModelAndView();
            System.out.println("username="+user+"  	password="+password);
            req.setAttribute("hello", "world");
            if("siggy".equals(user)&&"1111".equals(password)){
                mv.addObject("msg", "登录成功!!!");
                mv.setViewName("index");
            }else{
                mv.setViewName("login");
            }
            return mv;
        }

    b) 通过 ModelAndView 将数据携带到前台,前台使用 el 和 jstl 来获取数据

    @RequestMapping("/login.do")
        public ModelAndView login(User user){
            ModelAndView mv = new ModelAndView();
            System.out.println("username="+user.getName()+"  	password="+user.getPwd());
            if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
                mv.addObject("msg", "登录成功!!!");
                mv.setViewName("index");
            }else{
                mv.setViewName("login");
            }
            return mv;
        }

    c) 也可以通过 ModelMap 来携带数据, ModelMap 类型的数据,需要在处理方法的参数中声明:

    @RequestMapping("/login.do")
        public ModelAndView login(User user,ModelMap map){
            ModelAndView mv = new ModelAndView();
            System.out.println("username="+user.getName()+"  	password="+user.getPwd());
            if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
                map.addAttribute("msg", "登录成功!!!");
                mv.setViewName("index");
            }else{
                mv.setViewName("login");
            }
            return mv;
        }

    d) 也可以通过 Model 来携带数据,Model 类型的数据,需要在处理方法的参数中声明

    @RequestMapping("/login.do")
        public ModelAndView login(User user,Model model){
            ModelAndView mv = new ModelAndView();
            System.out.println("username="+user.getName()+"  	password="+user.getPwd());
            if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
                model.addAttribute("msg", "登录成功!!!");
                mv.setViewName("index");
            }else{
                mv.setViewName("login");
            }
            return mv;
        }
  • 相关阅读:
    基于消息摆渡节点的DTN路由
    A DTN Congestion Mechanism Based on Distributed Storage
    $(formId).autocomplete is not a function
    [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
    ajax提交的中文便会变成乱码
    Ajax原理
    Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.init
    JavaScript 无符号位移运算符 >>> 三个大于号 的使用方法
    普通按钮提交
    jsp的一些基本操作
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/11273653.html
Copyright © 2011-2022 走看看