SpringMVC学习笔记(三)--@RequestMapping和参数绑定

目录

一、@RequestMapping

二、参数中文乱码的处理

2.1 Get请求方式乱码

2.2 Post请求方式乱码

2.3 jdbc设置中文编码

2.4 数据库编码格式

三、参数绑定

3.1 基本类型和String、char的接收

3.2 实体类型的接收

3.3 封装类型的接收

3.4 集合类型的接收

3.4.1 数组

3.4.2 集合

四、批量修改的坑


一、@RequestMapping

  1. 基本的路径映射:直接在方法上面,就可以访问这个路径
  2. 窄化映射请求:就是一个二级路径的请求
    1. 在类上声明一个路径,在方法上也声明一个路径
    2. 实际路径 = 类的路径/方法上的路径
  3. 多路径映射:@RequestMapping(“user1”,”user2”),使用任意一个都可
  4. 限制HTTP请求:可以指定接收哪种请求方式的请求
    1. @RequestMapping(value="/user",method={RequestMethod.POST}

 


二、参数中文乱码的处理

2.1 Get请求方式乱码

tomcat-->conf-->server.xml-->加上URIEncoding="UTF-8"

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" 
URIEncoding="UTF-8"/>

2.2 Post请求方式乱码

在web.xml文件中,servlet的配置之前加上如下代码

<!--设置编码-->
  <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>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

2.3 jdbc设置中文编码

characterEncoding=UTF-8

2.4 数据库编码格式

 


三、参数绑定

参数绑定实际上就是接收页面请求参数的过程,springMVC对此做了封装

  1. 原生方法(HttpServletRequest):不用了
  2. 基本类型和String、char的接收
  3. 实体类型的接收
  4. 封装类型的接收
  5. 集合类型的接收

3.1 基本类型和String、char的接收

方法一:

方法中的参数名和页面的name属性一致即可

方法二:

在参数前加上注解@RequestParam

主要有三个属性,value、required、defaultValue

3.2 实体类型的接收

和上一个差不多,页面中name属性和对象属性名一致

方法中直接为实体类对象

3.3 封装类型的接收

3.4 集合类型的接收

集合的参数绑定分成数组和集合(List、Set、Map)

3.4.1 数组

很典型的实例:批量删除

 

 

3.4.2 集合

1、主要应用:批量插入、批量修改。此处举个批量修改的实例

ps:此处是在Teacher表的CRUD基础上改造的批量修改,查询全部之后展示的页面,数据的值是可以批量修改的,然后传过后台的批量修改控制器。

2、核心代码

showTeacher.jsp

<form action="updateMore.do" method="post">
    <table border="1">
        <tr align="center">
            <td>教师ID</td>
            <td>教师姓名</td>
            <td>教师性别</td>
            <td>教师密码</td>
            <td>教师年龄</td>
            <td>操作</td>
        </tr>
        <c:forEach items="${teacherList}" varStatus="status" var="teacher">
            <tr>
                <td><input name="list[${status.index}].tid" value="${teacher.tid}" readonly="readonly"/></td>
                <td><input name="list[${status.index}].tname" value="${teacher.tname}"/></td>
                <td><input name="list[${status.index}].sex" value="${teacher.sex}"/></td>
                <td><input name="list[${status.index}].password" value="${teacher.password}"/></td>
                <td><input name="list[${status.index}].age" value="${teacher.age}"/></td>
                <td><a href="delete.do?id=${teacher.tid}">删除</a>
                    <a href="findByTid.do?id=${teacher.tid}">修改</a></td>
            </tr>
        </c:forEach>
        <input type="submit" value="批量修改">
    </table>
</form>

TeacherController.java

@RequestMapping("updateMore")
    public String updateMore(QueryItem item) throws IOException {
        before();
        List<Teacher> teacherList = item.getList();
        for (Teacher teacher1 : teacherList) {
            Teacher teacher=new Teacher();
            teacher.setTid(teacher1.getTid());
            teacher.setTname(teacher1.getTname());
            teacher.setSex(teacher1.getSex());
            teacher.setPassword(teacher1.getPassword());
            teacher.setAge(teacher1.getAge());
            teacherMapper.updateTeacher(teacher);
        }
        after();
        return "redirect:findAll";
    }

3、结果演示

 


四、批量修改的坑

当时写完代码发现点击批量修改之后,后台得到的list为空,一直百思不得其解。

后面发现,页面name属性的值应该是自己构造的封装类,而不是后台传过来域中的值

name属性的值和后台传过来的teacherList无关,页面传递给后台的是封装类的list属性值

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值