发表于: 2019-12-01 22:35:48

1 1158


了解Spring MVC 参数绑定:

1. 从 客户端 请求 Key/value 数据,经过 参数绑定 ,将 Key/value 数据绑定到 controller 方法的 形参上

2. spring MVC中,接受页面提交的数据是通过方法的形参来接收的,而不是在 controller 类定义的成员变量接收

*   处理器适配器调用 springMVC 提供的 参数绑定组件 将 key/value 数据转换成 controller 方法的 形参.

*   参数绑定组件: 在 springMVC 早期版本使用ProperEditor(只能对字符串传成java对象)

*   后期使用 converter (进行任意类型的传换)

*   springmvc 提供了很多converter(转换器)

*   在特殊情况下需要自定义converter

*   比如:对日期的数据绑定需要自定义converter


参数绑定默认支持的类型:

1. 直接在 controller 方法形参上定义下边类型的对象,就可以使用这些对象. 在参数绑定的过程中,如果遇到下边类型直接进行绑定.

* a. HttpServletRequest 通过request对象获取请求信息

* b. HttpServletResponse 通过response处理响应信息

* c. HttpSession 通过session对象,得到session存放的对象

* d. Model/ModelMap

*       - Model 是一个接口

*       - ModelMap 是一个接口的实现

*       作用: 将model数据填充到request域.


/* 商品信息编辑 */

@RequestMapping(value = "/editItems", method = {RequestMethod.GET,RequestMethod.POST})

public String editItems(Model model, Integer id) throws Exception{

   //调用service根据商品id查询商品信息

   ItemsCustom itemsCustom = itemsService.findItemsById(id);

   //通过形参中的model将model数据传到页面

   //相当于modelAndView.addObject方法

   model.addAttribute("itemsCustom", itemsCustom);

   return "items/editItems";

}

参数绑定 简单类型:

1. 通过 @RequestParam 对 简单类型 的参数进行绑定

* - 如果不使用 @RequestParam, 要求 request传入参数名称 和 controller方法 的 形参 必须一致,才能绑定成功

* - 如果使用 @RequestParam, 不用限制 request 传入参数的名称和 controller方法的形参一致.

* - 通过 required属性 指定参数是否必须传入,如果设置为true,又没有传入参数,会报错: Required Integer parameter 'id' is not present

示例:

@RequestMapping(value = "/editItems2", method={RequestMethod.POST,RequestMethod.GET})

//@RequestParam 里指定request 传入的参数名称和形参绑定,将id与items_id绑定

/* 正确的访问url http://localhost:8089/items/editItems2.action?id=1  会传入id值 */

/* 通过 requited属性来指定参数是否必须传入, true, defaultValue为指定默认值,不设置defaultValue又不传入id会报错 */

public String editItems2(Model model, @RequestParam(value="id",required=true,defaultValue = "1") Integer items_id) throws Exception{

   //调用service根据商品id查询商品信息

   ItemsCustom itemsCustom = itemsService.findItemsById(items_id);

   //通过形参中的model将model数据传到页面

   //相当于modelAndView.addObject方法

   model.addAttribute("itemsCustom", itemsCustom);

   return "items/editItems";

}


编辑页面jsp  WEB-INF/jsp/items/editItems.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

<!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>修改商品信息</title>

</head>

<body>

<%-- 添加一个自定义tags, 将long类型的时间转为固定格式输出 --%>

<%@ taglib uri="/tags" prefix="date"%>

<form id="itemForm" action="${pageContext.request.contextPath }/items/editItemsSubmit.action" method="post" >

   <input type="hidden" name="id" value="${itemsCustom.id }"/>

   修改商品信息:

   <table width="100%" border=1>

       <tr>

           <td>商品名称</td>

           <td><input type="text" name="name" value="${itemsCustom.name }"/></td>

       </tr>

       <tr>

           <td>商品价格</td>

           <td><input type="text" name="price" value="${itemsCustom.price }"/></td>

       </tr>

       <td>商品生产日期</td>

       <%-- 使用自定义taglib标签显示 --%>

       <td><input type="text" name="createtime" value="<date:date value ="${itemsCustom.createtime} "/>"/></td>

       <%--<tr>

           <td>商品图片</td>

           <td>

               <c:if test="${item.pic !=null}">

                   <img src="/pic/${item.pic}" width=100 height=100/>

                   <br/>

               </c:if>

               <input type="file"  name="pictureFile"/>

           </td>

       </tr>--%>

       <tr>

           <td>商品简介</td>

           <td>

               <textarea rows="3" cols="30" name="detail">${itemsCustom.detail }</textarea>

           </td>

       </tr>

       <tr>

           <td colspan="2" align="center"><input type="submit" value="提交"/>

           </td>

       </tr>

   </table>

</form>

</body>

</html>


为了防止乱码的发生,我们现在web.xml配置文件里面设置一个乱码过滤器:

<!-- 为了能够处理中文的post请求,再配置一个encodingFilter,以避免post请求中文出现乱码情况: -->

<!-- 需要再pom.xml中添加: <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> -->

<filter>

   <filter-name>encodingFilter</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>

   <init-param>

       <param-name>forceEncoding</param-name>

       <param-value>true</param-value>

   </init-param>

</filter>

<filter-mapping>

   <filter-name>encodingFilter</filter-name>

   <url-pattern>*.action</url-pattern>

</filter-mapping>

问题:和前端的交互还不是很明白 JSP有点懵

明天的计划:搭建完BUG没跑通 spring自动将前端数据绑定到handler方法的形参上???没搞懂


返回列表 返回列表
评论

    分享到