springmvc参数绑定

springmvc可以单例开发,Handler中一个方法为一个请求的servlet

@controller:标识注解类为一个Handler

@RequestMapping:将url进行映射具体Handler和Handler中具体方法

 

springmvc中注解开发的参数绑定

绑定过程:将request请求中存储的key/value的数据,通过内置的转换机制,将key/value串转成形参需要的结果并传给形参。

绑定所支持的类型:

1)默认支持很多类型:request,response,session,model/modelMap(模型数据会存储requset域中)

2)支持简单数据类型,整形,字符串,日期类型

需保证request请求的参数名和形参名称一致,会自动绑定

如果requset请求参数名与形参名不一致,可以使用@RequestParam注解指定request请求的参数名称,注解在形参前进行绑定。

3)支持pojo类型

需保证request请求的参数与pojo类的属性名称一致,自动将request请求的参数值转换成对应属性类型,并将值设置到该属性。

形参中同时又pojo类型和简单数据类型,通过名称设置值,参数绑定互不影响

4)自定义参数绑定

举例日期类型自定义绑定

设置Converter<源类型,目标类型>接口实现类

将request参数类型String转为java.util.Date类型,实现接口Converter<String,Date>

转换目标类型与pojo中需求转换属性的数据类型一致。

 

参数绑定的实现:

基本数据类型实现自动绑定:

提交表单

<form action="${pageContext.request.contextPath }/login" method="post">
    <input type="text" name="username">
    <input type="password" name="password">
    <button type="submit" value="submit"/>
</form>

@RequestMapping("/")Controller 内方法形参

@RequestMapping("/login")
public String login(String username,String password) {}

pojo类属性与request参数自动绑定:

表单

<form action="${pageContext.request.contextPath }/item/query" method="post">
		<input type="submit" value="GO" />
		<input type="text"name="name"/>
</form>

@RequestMapping("/item") 方法中pojo作为形参

public ModelAndView queryByParam(Item item) {}

数组类型的绑定:

提交数组表单:

<form action="${pageContext.request.contextPath }/item/delete" name="deleteForm" method="post" >
        <c:forEach items="${items }" var="item" varStatus="itemStatus">
            <input type="checkbox" name="ids" value="${item.id }"  />
		</c:forEach>
</form>

@RequestMapping("/item") Controller 数组形参方法:

@RequestMapping("/delete")
public String deleteByIds(Integer[] ids) {}

List类型的绑定:

直接使用参数List绑定报错    public String editByList(List<Item> items) {}

Request processing failed; nested exception is java.lang.IllegalStateException: No primary or default constructor found for interface java.util.List] with root cause

使用包装pojo类型将请求参数传递到成员变量list<T> 中T的相应成员变量

包装的pojo类:

public class ItemQueryVo {
	private List<Item> items;
    public List<Item> getItems() {
		return items;
	}
    public void setItems(List<Item> items) {
		this.items = items;
	}
}

@RequestMapping("/item") Controller 包装pojo类型参数方法:


public String editByList(ItemQueryVo itemQueryVo) {}

请求表单的参数命名:

<form action="${pageContext.request.contextPath }/item/edit" method="post" name="testEditFrom">
		<c:forEach begin="0" end="5" var="i">
			<input type="text" name="items[${i }].name" /> 	
		</c:forEach>
</form>

Set类型的绑定:

也需为包装pojo类型中成员变量进行数据绑定,绑定与List绑定相同。在此不举例

Map类型的绑定:

Map类型数据绑定需作为包装pojo类型中成员变量,所以方法参数类型为包装的pojo类型

包装pojo类:

public class ItemQueryVo {
    private Map<String,Item> itemMap;
	public Map<String, Item> getItemMap() {
		return itemMap;
	}
	public void setItemMap(Map<String, Item> itemMap) {
		this.itemMap = itemMap;
	}
}

@RequestMapping("/item") Controller的方法体:

	@RequestMapping("/edit")
	public String editByList(ItemQueryVo itemQuerVo) { return "item/success"; }

reuqest请求表单参数名设计

<form action="${pageContext.request.contextPath }/item/edit" method="post" name="testEditFrom">
	<input type="text" name="itemMap['a'].name" /> 
	<input type="text" name="itemMap['b'].name" /> 	
	<input type="text" name="itemMap['c'].name" /> 
</form>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值