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

原文地址:https://www.cnblogs.com/Doaoao/p/10647809.html