springmvc参数绑定

springmvc参数绑定

1.spring参数绑定过程

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

springmvc中,接收页面提交的数据是通过方法形参来接收。而不是在controller类定义成员变量接收!!!!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XUmgh2Rm-1640260653110)(image/wps415.png)]

2.默认支持的类型

直接在controller方法形参上定义下边类型的对象,就可以使用这些对象。

在参数绑定过程中,如果遇到下边类型直接进行绑定。

1).HttpServletRequest

通过request对象获取请求信息

2).HttpServletResponse

通过response处理响应信息

3).HttpSession

通过session对象得到session中存放的对象

4).Model/ModelMap

model是一个接口,modelMap是一个接口实现 。

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

3.简单类型

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

如果不使用@RequestParam,要求request传入参数名称和controller方法的形参名称一致,方可绑定成功。

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

通过required属性指定参数是否必须要传入,如果设置为true,没有传入参数,报下边错误:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VHTITbj6-1640260653114)(image/wps416.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8vy2fQVu-1640260653125)(image/wps417.jpg)]

1).pojo绑定

页面中input的name和controller的pojo形参中的属性名称一致,将页面中数据绑定到pojo。

页面定义:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ikItcvh-1640260653128)(image/wps418.jpg)]

controller的pojo形参的定义:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-94AS1BWA-1640260653130)(image/wps419.jpg)]

2).自定义参数绑定实现日期类型绑定

对于controller形参中pojo对象,如果属性中有日期类型,需要自定义参数绑定。

将请求日期数据串转成日期类型,要转换的日期类型和pojo中日期属性的类型保持一致。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EppDFVet-1640260653133)(image/wps420.jpg)]

所以自定义参数绑定将日期串转成java.util.Date类型。

需要向处理器适配器中注入自定义的参数绑定组件。

第一步:自定义日期类型绑定
public class CustomDateConverter implements Converter<String, Date> {
	@Override
	public Date convert(String source) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			return sdf.parse(source);  //直接转成返回
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;  //如果参数绑定失败返回null
	}
}
第二步:配置方式
XML版本 - 在dispatcher-servlet.xml中配置自定义参数绑定器
<mvc:annotation-driven conversion-service="conversionService">
</mvc:annotation-driven>

<!-- 自定义参数绑定 -->
<bean id="conversionService" 
	class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
	<!-- 转换器 -->
	<property name="converters">
		<list>
			<!-- 日期类型转换 -->
			<bean class="com.etc.ssm.controller.converter.CustomDateConverter">
</bean>
		</list>
	</property>
</bean>
JavaConfig配置类版本 - 在SpringMVCConfig中配置自定义参数绑定器
//自定义参数绑定器
@Override
public void addFormatters(FormatterRegistry registry) {
    //将String -> Date的转换器,添加至参数绑定器
    registry.addConverter(customStringDateConverter());
    //....其它参数绑定器
}

//自定义的转换器
@Bean
public CustomStringDateConverter customStringDateConverter(){
    return new CustomStringDateConverter();
}
第三步:其它方式

在Items类中,将Date类型的属性加上注解

@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date createtime;

4.包装类型pojo参数绑定

1).需求

商品模糊查询:controller方法中实现商品查询条件传入。

2).实现方法

第一种方法:在形参中 添加HttpServletRequest request参数,通过request接收查询条件参数。

第二种方法:在形参中 让包装类型的pojo接收查询条件参数。

分析:

​ 页面传参数的特点:复杂,多样性。条件包括 :用户账号、商品编号、订单信息。。。

​ 如果将用户账号、商品编号、订单信息等放在简单pojo(属性是简单类型)中,pojo类属性比较多,比较乱。

​ 建议使用包装类型的pojo,pojo中属性是pojo。

3).页面参数和controller方法形参定义

ItemsCustomMapper.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zMd4DhoY-1640260653139)(image/wps51.jpg)]

页面参数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mt0nolNH-1640260653143)(image/wps52.jpg)]

商品名称:<input name=“itemsCustom.name” />

注意:itemsCustom和包装pojo中的属性一致即可。

controller方法形参:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tJOLhR8i-1640260653145)(image/wps53.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tLbEvKjP-1640260653146)(image/wps54.jpg)]

5.集合类型绑定

1).数组绑定

1.1 需求

商品批量删除,用户在页面选择多个商品,批量删除。

1.2 表现层实现

关键:将页面选择(多选)的商品id,传到controller方法的形参,方法形参使用数组接收页面请求的多个商品id。

Controller方法定义:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-onQhajau-1640260653148)(image/wps55.jpg)]

Service中:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lV5t4mhK-1640260653154)(image/wps56.jpg)]

JSP页面定义:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hbhm2x0I-1640260653155)(image/wps57.jpg)]

2).list绑定

2.1 需求

通常在需要批量提交数据时,将提交的数据绑定到list<pojo>中,比如:成绩录入(录入多门课成绩,批量提交)

本例子需求:批量商品修改,在页面输入多个商品信息,将多个商品信息提交到controller方法中。

2.2 表现层实现

controller方法定义:

​ 1、显示:进入批量商品修改页面(页面样式参考商品列表实现)

​ 2、修改:批量修改商品提交

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EaeDE9tY-1640260653157)(image/wps58.jpg)]

Service方法中:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-deH7SewI-1640260653158)(image/wps59.jpg)]

ItemsQueryVo类:

使用List接收页面提交的批量数据,通过包装pojo接收,在包装pojo中定义list属性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fTDbzq19-1640260653160)(image/wps510.jpg)]

JSP页面定义:

<c:forEach  items="${itemsList}" var="item" varStatus=”status”></c:forEach>

c:forEach 中的varStatus属性 该绑定值也就是status封装了当前遍历的状态

current 当前这次迭代的(集合中的)项 ;

index当前这次迭代从 0 开始的迭代索引;

count 当前这次迭代从 1 开始的迭代计数

first用来表明当前这轮迭代是否为第一次迭代的标志;

last用来表明当前这轮迭代是否为最后一次迭代的标志;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r4djvfPJ-1640260653163)(image/wps511.jpg)]

3).map绑定

也通过在包装pojo中定义map类型属性。

在包装类中定义Map对象,并添加get/set方法。

包装类中定义Map对象如下:

ItemsQueryVo类:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Jc5s7dG-1640260653170)(image/wps512.jpg)]

Contrller方法定义如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6nOqsA6Z-1640260653172)(image/wps513.jpg)]

Service类:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-et9BiWFF-1640260653173)(image/wps514.jpg)]

JSP页面定义如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6IdfmZ8w-1640260653174)(image/wps515.jpg)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

what's your name.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值