zoukankan      html  css  js  c++  java
  • SpringMVC_表单

    # 接收表单中提交的数据

    1:编写带有表单的jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <form action="/regist1.do" method="post">
            姓名:<input type="text" name="username"><br>
            年龄:<input type="text" name="age"><br>
            <input type="submit" value="提交">
        </form>
    </body>
    </html>

    2:创建一个controller来接收表单提交的数据

    package com.doaoao.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    @Controller
    public class RegistController {
        @RequestMapping("/regist1.do")
        public ModelAndView regist1(String username, int age) throws Exception{
            ModelAndView mv = new ModelAndView();
            mv.addObject("username", username);
            mv.addObject("age", age);
            mv.setViewName("result");        // 用result.jsp进行显示数据
            return mv;
        }
    }

     补充:当上方的username为中文时,会显示乱码

    可以利用SpringMvc中的CharacterEncodingFiler来解决该问题(其实就是一个过滤器),我们需要在web.xml文件中进行配置,最好将其配置在其它过滤器之前

    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    
        <!--指定字符编码-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    
        <!--强制指定字符编码,即如果在request中指定了字符编码,那么也会为其强制指定当前(web.xml)设置的字符编码-->
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping

     ...

    # 参数名不一致的问题

    所谓的参数名不一致问题指的是,例如表单中的input的属性name和springMvc类中方法ModelAbdView中的参数不一样的问题,这时可以利用@RequestParam()注解来解决这个问题

    该注解中含有三个属性

    1:value:指定请求参数的名称,即表单中input的name值
    name:同value,两者只能使用一个 2:equired:指定该参数是否是必须传入的,boolean类型(true,表示请求中所携带的参数中必须包含当前参数;false,表示有没有均可) 3:defaultValue:指定当前参数的默认值。如果请求中没有该参数,则当前方法参数将取该默认值。

    # 创建参数名不一致例子

    1:创建提交数据的表单

    <form action="/regist1.do" method="post">
        姓名:<input type="text" name="username"><br>
        年龄:<input type="text" name="age"><br>
        <input type="submit" value="提交">
    </form>

    2:创建Controller类来处理提交的数据

    @RequestMapping("/regist.do")
    public ModelAndView regist(@RequestParam(name="username") String t_username, 
        @RequestParam(name="age") int t_age) throws Exception{
        ModelAndView mv = new ModelAndView();
        mv.addObject("username", t_username);
        mv.addObject("age", t_age);
        mv.setViewName("result");
        return mv;
    }

    ...

    # 给提交的参数设置默认值

    当提交的参数为int类型,且当前参数提交为空,因为当前会传入一个空字符串,无法将空字符串转为int类型,会报错

    可以利用 @RequestParam(name = "age",defaultValue="18") int age  设置一个默认值

    # 使用对象接收表单参数

    当表单中的参数较多时,需要在controller的方法里面将所有的参数均写上,这样就不太方便,可以定义一个javabean,将表单中的参数均写在javabena的属性中,将这个javabean作为参数写到controller中

    1:定义一个Person类,类中的参数和表单中的保持一致

    package com.doaoao.bean;
    public class Person {
        private String name;
        private int age;
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }

    2:定义一个controller方法,将Person作为参数传入

    package com.doaoao.controller;
    import com.doaoao.bean.Person;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    @Controller
    public class RegistController02 {
    
        @RequestMapping("/regist.do")
        public ModelAndView regist(Person person) throws Exception{
    
            ModelAndView mv = new ModelAndView();
            mv.addObject("name", person.getName());
            mv.addObject("age", person.getAge());
            mv.setViewName("result");
            return mv;
        }
    }
    # 路径变量 PathVariable

    Controller除了可以接收表单提交的数据之外,还可以获取url中携带的变量,即路径变量,此时需要使用@PathVariable注解来设置

    @PathVariable 包含下面几个属性

    value:指定请求参数的名称,即url中的值,当url中的名称和方法参数名称不一致时,可以使用该属性解决。
    name:同value,两者只能使用一个
    required:指定该参数是否是必须传入的,boolean类型。若为 true,则表示请求中所携带的参数中必须包含当前参数。若为 false,则表示有没有均可。

    # 创建一个例子

    package com.monkey1024.controller;
    import com.monkey1024.bean.Student;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    @Controller
    public class RegistController03 {
    
        @RequestMapping("/{username}/{age}/regist.do")
        public ModelAndView regist(@PathVariable("username") String name,@PathVariable int age) throws Exception{
    
            ModelAndView mv = new ModelAndView();
            mv.addObject("name", name);
            mv.addObject("age", age);
            mv.setViewName("result");
            return mv;
        }
    }
    
    // 可以在浏览器中直接访问 localhost:8080/doaoao/18/regist.do
    相当于把 doaoao赋值给 username,将18赋值给age

    本笔记参考自:小猴子老师教程 http://www.monkey1024.com

  • 相关阅读:
    ViewPager+Fragmrnt最简单结合方法
    Microsoft SQL Server Version List(SQL Server 版本)
    hdu 2795 Billboard(线段树单点更新)
    面向对象程序设计的思想的长处
    iOS 友盟分享
    使用Broadcast实现android组件之间的通信
    jquery ui 分页插件 传入后台的连个參数名
    android adb常见问题的解决方法!
    UVa 11015
    优秀程序猿学习方法
  • 原文地址:https://www.cnblogs.com/Doaoao/p/10647809.html
Copyright © 2011-2022 走看看