1.默认支持的参数类型

处理器形参中添加如下类型的参数处理适配器会默认识别并进行赋值。

除了ModelAndView以外,还可以使用Model来向页面传递数据,

Model是一个接口,在参数里直接声明model即可。

如果使用Model则可以不使用ModelAndView对象,Model对象可以向页面传递数据,View对象则可以使用String返回值替代。

不管是Model还是ModelAndView,其本质都是使用Request对象向jsp传递数据。

	@RequestMapping(value = {"/itemlist.action","/samePage.action"})
public String itemList(Model model,
HttpServletRequest request,
HttpServletResponse response,
HttpSession session
) throws Exception{ //从Mysql中查询
List<Items> list = itemService.selectItemsList();
model.addAttribute("itemList", list);
return "itemList";
} }

2.绑定简单类型

当请求的参数名称和处理器形参名称一致时会将请求参数与形参进行绑定。

这样,从Request取参数的方法就可以进一步简化。

<td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
@RequestMapping("/itemEdit")
public String queryItemById(int id, ModelMap model) {
// 根据id查询商品数据
Item item = this.itemService.queryItemById(id);
model.addAttribute("item", item);
return "itemEdit";}

以下数据类型都可以通过以上方式进行绑定:

参数类型推荐使用包装数据类型,因为基础数据类型不可以为null

整形:Integer、int

字符串:String

单精度:Float、float

双精度:Double、double

布尔型:Boolean、boolean

说明:对于布尔类型的参数,请求的参数值为true或false。或者1或0

请求url:

http://localhost:8080/xxx.action?id=2&status=false

处理器方法:

public String editItem(Model model,Integer id,Boolean status)

使用@RequestParam常用于处理简单类型的绑定。

@RequestParam使用

@RequestMapping("/itemEdit")//此处不加后缀.aciont也可

public String queryItemById(@RequestParam(value = "itemId", required = true, defaultValue = "1") Integer id,

       ModelMap modelMap) {

    // 根据id查询商品数据

    Item item = this.itemService.queryItemById(id);

    // 把商品数据放在模型中

    modelMap.addAttribute("item", item);

     return "itemEdit";}

value:参数名字,即入参的请求参数名字,如value=“itemId”表示请求的参数中的名字为itemId的参数的值将传入到id中来

required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报错

TTP Status 400 - Required Integer parameter 'XXXX' is not present

defaultValue:默认值,表示如果请求中没有同名参数时的默认值

主要用来处理前后端参数名不一致的问题。

3.绑定pojo类型

如果提交的参数很多,或者提交的表单中的内容很多的时候,可以使用简单类型接受数据,也可以使用pojo接收数据。

要求:pojo对象中的属性名和表单中input的name属性一致,会自动将请求参数赋值给pojo的属性。

jsp页面表单

<form id="itemForm"	action="${pageContext.request.contextPath }/updateitem.action" method="post">
<input type="hidden" name="id" value="${item.id }" /> 修改商品信息:
<table width="100%" border=1>
<tr>
<td>商品名称</td>
<td><input type="text" name="name" value="${item.name }" /></td>
</tr>
<tr>
<td>商品价格</td>
<td><input type="text" name="price" value="${item.price }" /></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="提交" />
</tr>
</table>
</form>

pojo类

public class Items {
private Integer id; private String name; private Float price;

4.绑定包装pojo

包装类在jsp页面的name属性值需要以包装类中的属性值点出pojo类的属性值,比如item.id,然后在处理器中取值的时候,也是由包装类get到包装类的属性值,然后再get出pojo类的属性值,比如queryVo.getItem.getId()

jsp页面

查询条件:
<table width="100%" border=1>
<tr>
<td>商品id<input type="text" name="item.id"/></td>
<td>商品名称<input type="text" name="item.name"/></td>
</tr>
<tr>
<td><input type="submit" value="查询"/></td>
</tr>
</table>

pojo包装类

public class QueryVo {
private Item item;
//此处省略get,set方法
}

处理器:

	// 绑定包装数据类型
@RequestMapping("/queryItem")
public String queryItem(QueryVo queryVo) {
System.out.println(queryVo.getItem().getId());
System.out.println(queryVo.getItem().getName()); return "itemList";
}

5.自定义参数绑定

由于日期数据有很多种格式,springmvc没办法把字符串转换成日期类型。所以需要自定义参数绑定。

前端控制器接收到请求后,找到注解形式的处理器适配器,对RequestMapping标记的方法进行适配,并对方法中的形参进行参数绑定。可以在springmvc处理器适配器上自定义转换器Converter进行参数绑定。

一般使用<mvc:annotation-driven/>注解驱动加载处理器适配器,可以在此标签上进行配置。

jsp页面时间字段:

在jsp中加入下面的标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 时间字段
<td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>

创建自定义转换器类

//Converter<S, T>
//S:source,需要转换的源的类型
//T:target,需要转换的目标类型
public class DateConverter implements Converter<String, Date> { @Override
public Date convert(String source) {
try {
// 把字符串转换为日期类型
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
Date date = simpleDateFormat.parse(source); return date;
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 如果转换异常则返回空
return null;
}
}

在web.xml配置自定义的转换器类

<!-- 配置注解驱动 -->
<mvc:annotation-driven conversion-service="conversionService" />
<!-- 转换器配置 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
   <property name="converters">
      <set>
          <bean class="cn.springmvc.converter.DateConverter" />
      </set>
   </property>
</bean>

6.绑定到数组-ids

jsp页面-<td><input type="checkbox" name="ids" value="${item.id}"/></td>

页面选中多个checkbox向controller方法传递

<table width="100%" border=1>
<tr>
<td>选择</td>
<td>商品名称</td>
<td>商品价格</td>
<td>生产日期</td>
<td>商品描述</td>
<td>操作</td>
</tr>
<c:forEach items="${itemList }" var="item">
<tr>
<td><input type="checkbox" name="ids" value="${item.id}"/></td>
<td>${item.name }</td>
<td>${item.price }</td>
<td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
<td>${item.detail }</td>
<td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
</tr>
</c:forEach>
</table>

绑定数组类型,可以使用两种方式,1.包装类的属性接收(在包装类中添加个数组属性值,用来接受ids数组),2.直接在处理器形参中接收

public class QueryVo {
private Item item;
private Interger[] ids;
//此处省略get,set方法
}
@RequestMapping("/queryItem.action")
public String queryItem(QueryVo queryVo, Integer[] ids) { System.out.println(queryVo.getItem().getId());
System.out.println(queryVo.getItem().getName()); System.out.println(queryVo.getIds().length);//包装类属性接收
System.out.println(ids.length);//处理器中形参直接接收 return "success";
}

7.绑定到List

使用包装pojo类属性值接收list

注意:接收List类型的数据必须是pojo的属性,如果方法的形参为ArrayList类型无法正确接收到数据

public class QueryVo {
private Item item;
private Interger[] ids;
private List<Iteam> iteamList;
//此处省略get,set方法
}

jsp页面

name属性必须是list属性名+下标+元素属性

<form action="${pageContext.request.contextPath }/updates.action" method="post">
<table width="100%" border=1>
<c:forEach items="${itemList }" var="item" varStatus="s">
<tr>
<td><input type="checkbox" name="ids" value="${item.id }"></td>
<td><input type="text" name="itemsList[${s.index}].name" value="${item.name }"></td>
<td><input type="text" name="itemsList[${s.index }].price" value="${item.price }"></td>
<td>${item.detail }</td> <td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
</tr>
</c:forEach>
</table>
<input type="submit" value="修改">
</form>

${current} 当前这次迭代的(集合中的)项

${status.first}   判断当前项是否为集合中的第一项,返回值为true或false

${status.last}    判断当前项是否为集合中的最

varStatus属性常用参数总结下:

${status.index}   输出行号,从0开始。

${status.count}   输出行号,从1开始。

${status.后一项,返回值为true或false

begin、end、step分别表示:起始序号,结束序号,跳跃步伐。

包装pojo类属性值接收List

@RequestMapping("/update.action")
public String queryItem(QueryVo queryVo) { System.out.println(queryVo.getIteamList().size());//包装类属性接收 return "success";
}

Springmvc入门基础(四) ---参数绑定的更多相关文章

  1. SSM框架之SpringMVC(2)参数绑定及自定义类型转换

    SpringMVC(2)参数绑定及自定义类型转换 1.请求参数的绑定 1.1. 请求参数的绑定说明 1.1.1.绑定机制 表单提交的数据都是k=v格式的 username=haha&passw ...

  2. springMVC入门(四)------参数绑定与返回值类型

    简介 从之前的介绍,已经可以使用springMVC完成完整的请求.返回数据的功能. 待解决的问题:如何将数据传入springMVC的控制器进行后续的处理,完成在原生servlet/jsp开发中Http ...

  3. JAVAEE——SpringMVC第一天:介绍、入门程序、架构讲解、SpringMVC整合MyBatis、参数绑定、SpringMVC和Struts2的区别

    1. 学习计划   第一天 1.SpringMVC介绍 2.入门程序 3.SpringMVC架构讲解 a) 框架结构 b) 组件说明 4.SpringMVC整合MyBatis 5.参数绑定 a) Sp ...

  4. SpringMVC之Controller和参数绑定

    在上一篇Spring+SpringMVC+Mybatis整合中说到了SSM的整合,并且在其中添加了一个简单的查询功能,目的只是将整个整合的流程进行一个梳理,下面在上一篇中工程的基础上再说一些关于Spr ...

  5. springMVC第二天——高级参数绑定与其它特性

    大纲摘要: 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 2.@RequestMapping注解的使用 3.Controller方法返回值 4.Springmvc中异常处理 5 ...

  6. SpringMVC框架三:参数绑定

    这篇文章整合了SpringMVC和MyBatis: https://www.cnblogs.com/xuyiqing/p/9419144.html 接下来看看参数绑定: 默认Conrtroller可以 ...

  7. SpringMVC框架笔记02_参数绑定返回值文件上传异常处理器JSON数据交互_拦截器

    目录 第1章 高级参数的绑定 1.1 参数的分类 1.2 数组类型的参数的绑定 1.3 集合类型的参数的绑定 第2章 @RequestMapping的用法 2.1 URL路径映射 2.2 请求方法限定 ...

  8. SpringMVC中的自定义参数绑定案例

    由于日期数据有很多种格式,所以springmvc没办法把字符串转换成日期类型.所以需要自定义参数绑定.前端控制器接收到请求后,找到注解形式的处理器适配器,对RequestMapping标记的方法进行适 ...

  9. Springmvc的handler method参数绑定常用的注解

    转自:http://blog.longjiazuo.com/archives/1149   1. 简介: handler method参数绑定常用的注解,我们根据他们处理的Request的不同内容部分 ...

随机推荐

  1. 分享几个你可能不知道的交互式Git 命令

    摘要:本文中讲述的几个交互式 Git 命令可以帮助你将文件的特定部分组合成提交. 本文分享自华为云社区<Git你有可能不知道交互式暂存>,作者:龙哥手记. 本节中的几个交互式 Git 命令 ...

  2. 拒绝踩雷!全能的BI软件非它莫属

    BI工具现在是越来越火了,很多公司都会利用这些工具,提高工作效率.但是目前市面上的BI产品真的是越来越多,稍有不慎就会踩雷,那么我们应该要怎么选择这些BI工具呢?今天我为大家选了3款国内外口碑不错的B ...

  3. Iptables 防火墙常用配置

    转至:https://blog.csdn.net/lswzw/article/details/87971259 Iptables 防火墙常用配置 概念 命令行模式 查看 & 命令 -n:直接显 ...

  4. DirectX11 With Windows SDK--36 延迟渲染基础

    前言 随着图形硬件变得越来越通用和可编程化,采用实时3D图形渲染的应用程序已经开始探索传统渲染管线的替代方案,以避免其缺点.其中一项最流行的技术就是所谓的延迟渲染.这项技术主要是为了支持大量的动态灯光 ...

  5. 用RecyclerView实现水平滚动和网格视图

    建立RecyclerViewActivity.java文件 1 public class RecyclerViewActivity extends AppCompatActivity { 2 priv ...

  6. Python:在一个Python程序中,运行另一个Python程序

    学习自: 1~3学习自如何在python中执行另一个py文件_python_脚本之家 4~6学习自Python中四种运行其他程序的方式 - hankleo - 博客园 1.os.system方法 用法 ...

  7. Bugku CTF_web4

    1.打开网页,得到信息如下 2.打开hackbar,在body里传入post参数. 3.得到flag如下 4.主要考察post传参,和简单的php代码审计.

  8. 金蝶 K3 WISE 服务器必须登陆到桌面以后用户才能正常使用解决!

    我们单位K3的系统,由当地的服务商安装完以后就出现各种蛋疼的问题.做技术支持的小伙他总是会给一个小工具来解决,问他是什么原因要么说我的网络有问题,要么说我们的服务器有问题. K3所有客户端无法登陆一键 ...

  9. 『现学现忘』Docker基础 — 23、使用Docker安装Tomcat

    目录 步骤1:搜索镜像 步骤2:下载Tomcat镜像 步骤3:运行Tomcat镜像 步骤4:本机和外网测试 步骤5:解决问题 补充:--rm选项 步骤1:搜索镜像 使用docker search命令进 ...

  10. C#+SQL Server的数据库管理系统常用的代码

    数据库管理系统 数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立.使用和维护数据库,简称DBMS.它对数据库进行统一的管理和控制,以保证 ...