springmvc中的参数绑定

本文主要介绍了SpringMVC中的参数绑定机制,包括默认支持的参数类型如HttpServletRequest、HttpServletResponse、HttpSession和ModelMap,以及简单类型、POJO、自定义参数绑定和集合类的绑定方式。在SpringMVC中,参数传递是通过方法形参完成,支持多种数据类型的自动绑定和自定义转换器。
摘要由CSDN通过智能技术生成

在Struts2中我们都知道,它的传值是通过action类的属性进行传值的,并且在Action的方法中是不允许有形参的,但在springmvc中的参数传递是通过形参来传递的。

1.1    参数绑定

    处理器适配器在执行Handler之前需要把http请求的key/value数据绑定到Handler方法形参数上。

1.1.1 默认支持的参数类型

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

1.1.1.1HttpServletRequest

通过request对象获取请求信息

1.1.1.2HttpServletResponse

通过response处理响应信息

1.1.1.3HttpSession

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

1.1.1.4Model/ModelMap

ModelMap是Model接口的实现类,通过Model或ModelMap向页面传递数据,如下:

//调用service查询商品信息

Items item = itemService.findItemById(id);

model.addAttribute("item",item);

 

页面通过${item.XXXX}获取item对象的属性值。

使用Model和ModelMap的效果一样,如果直接使用Model,springmvc会实例化ModelMap。

1.1.2 参数绑定介绍

         注解适配器对RequestMapping标记的方法进行适配,对方法中的形参会进行参数绑定,早期springmvc采用PropertyEditor(属性编辑器)进行参数绑定将request请求的参数绑定到方法形参上,3.X之后springmvc就开始使用Converter进行参数绑定。

1.1.3 简单类型

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

1.1.3.1 整型

public String editItem(Modelmodel,Integer id) throws Exception{

1.1.3.2 字符串
1.1.3.3 单精度/双精度 
1.1.3.4 布尔型

处理器方法:

public String editItem(Modelmodel,Integer id,Boolean status) throwsException

请求url:

http://localhost:8080/springmvc_mybatis/item/editItem.action?id=2&status=false

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

1.1.3.5@RequestParam

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

value参数名字,即入参的请求参数名字,如value=“item_id”表示请求的参数区中的名字为item_id的参数的值将传入;

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

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

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

定义如下:

public String editItem(@RequestParam(value="item_id",required=true)String id) {    }

形参名称为id,但是这里使用value=" item_id"限定请求的参数名为item_id,所以页面传递参数的名必须为item_id。

注意:如果请求参数中没有item_id将跑出异常:

HTTP Status 500 - Required Integerparameter 'item_id' is not present

这里通过required=true限定item_id参数为必需传递,如果不传递则报400错误,可以使用defaultvalue设置默认值,即使required=true也可以不传item_id参数值

1.1.4 pojo

1.1.4.1简单pojo

将pojo对象中的属性名于传递进来的属性名对应,如果传进来的参数名称和对象中的属性名称一致则将参数值设置在pojo对象中

页面定义如下;

<inputtype="text" name="name"/>

<inputtype="text" name="price"/>

Contrller方法定义如下:

@RequestMapping("/editItemSubmit")

    public String editItemSubmit(Items items)throws Exception{

    System.out.println(items);

请求的参数名称和pojo的属性名称一致,会自动将请求参数赋值给pojo的属性。

1.1.4.2包装pojo

如果采用类似struts中对象.属性的方式命名,需要将pojo对象作为一个包装对象的属性,action中以该包装对象作为形参。

包装对象定义如下:

Public class QueryVo {

private Items items;

}

页面定义:

<inputtype="text" name="items.name" />

<inputtype="

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值