springmvc中的对象、数组、集合类型的参数绑定

一、pojo类型的参数绑定

实现方式:

1、在controller方法的形参中添加HttpServletRequest对象参数,通过request接收查询条件参数

<span style="white-space:pre">	</span>@RequestMapping("/queryItems")
	public ModelAndView queryItems<span style="background-color: rgb(255, 255, 102);">(HttpServletRequest request)</span> throws Exception {
		request.getParameter("参数名");
	<span style="white-space:pre">	</span>//。。。。
	}
2、 controller 方法的形参中让包装的 pojo 接收查询条件参数,页面中使用包装的 pojo 中的属性 . 属性名的方式进行传参,在 controller 形参中,直接添加包装的 pojo 变量即可。

controller方法的定义

@Controller
@RequestMapping("/items")
public class ItermsController {
	@Autowired
	private ItemsService itemsService;

	@RequestMapping("/queryItems")
	public ModelAndView queryItems(<span style="background-color: rgb(255, 255, 102);">QueryItemsCustomVo queryItemsCustomVo</span>) throws Exception {
		// 调用service查找数据库,查询商品列表,
		List<ItemsCustom> itemList = itemsService.findItemsList(queryItemsCustomVo);

		// 返回ModelAndView
		ModelAndView modelAndView = new ModelAndView();
		// 相当于request的setAttribute,在jsp页面中通过itemList获取数据
		modelAndView.addObject("itemList", itemList);

		// 指定视图
		// 下边的路径,如果在视图解析器中配置了jsp路径的前缀和后缀,则可以修改为
		// modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
		modelAndView.setViewName("/items/itemsList");
		// 上面的路径配置,可以不再程序中指定jsp地址的前缀和后缀

		return modelAndView;
	}}
页面的定义:注意itemsCustom 和包装 类QueryItemsCustomVo 中的属性一致

<span style="white-space:pre">		</span><table width="100%;" border="1">
			<tr>
				<td>商品名称:<input type="text"<span style="background-color: rgb(255, 255, 102);"> name="itemsCustom.name"</span> /></td>
			</tr>
			<tr>
				<td>
					<input type="button" value="查询" οnclick="queryItems();"/>
					<input type="button" value="批量删除" οnclick="deleteItems();"/>
				</td>
			</tr>
		</table>
QueryItemsCustomVo.java

package com.sky.ssm.po;

import java.util.List;

/**
 * 商品查询类 作用:为商品的查询提供相应的查询条件
 */
public class QueryItemsCustomVo {
	private Items items;
	private ItemsCustom <span style="background-color: rgb(255, 255, 102);">itemsCustom</span>;
	
	//批量商品信息
	private List<ItemsCustom> <span style="background-color: rgb(255, 204, 204);">itemsList</span>;

	public Items getItems() {
		return items;
	}

	public void setItems(Items items) {
		this.items = items;
	}

	public ItemsCustom getItemsCustom() {
		return itemsCustom;
	}

	public void setItemsCustom(ItemsCustom itemsCustom) {
		this.itemsCustom = itemsCustom;
	}

	public List<ItemsCustom> getItemsList() {
		return itemsList;
	}

	public void setItemsList(List<ItemsCustom> itemsList) {
		this.itemsList = itemsList;
	}

}

二、数组类型的参数绑定

controller方法的定义:

	@RequestMapping("/deleteItems")
	public String deleteItems(<span style="background-color: rgb(255, 255, 0);">Integer[] items_id</span>) throws Exception{
		
		//调用service批量删除商品
		
		return "success";
	}

页面的定义:

		<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="<span style="background-color: rgb(255, 255, 0);">items_id</span>" 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 }/items/editItems.action?id=${item.id}">修改</a></td>
				</tr>
			</c:forEach>
		</table>
注意的是:页面参数的名称要和controller方法中形参的名称一致,这样才能进行正确的参数绑定

三、List集合类型的参数绑定

controller方法的定义:

	@RequestMapping("/editItemsAllSubmit")
	public String editItemsAllSubmit(<span style="background-color: rgb(255, 255, 0);">QueryItemsCustomVo queryItemsCustomVo</span>) throws Exception{
		
		return "success";
	}
页面的定义:

		<table width="100%;" border="1">
			<tr>
				<td>商品名称</td>
				<td>商品价格</td>
				<td>生产日期</td>
				<td>商品描述</td>
			</tr>
			<c:forEach items="${itemList }" var="item" varStatus="status">
				<tr>
					<td>
					<!-- itemsList对应controller方法的形参中pojo对象中的itemsList属性;itemsList[${status.index }]对应于itemsList中第${status.index }个对象,id为第${status.index }个对象的属性 -->
						<input type="hidden" name="itemsList[${status.index }].id" value="${item.id}"/>
						<input name="itemsList[${status.index }].name" value="${item.name }"/>
					</td>
					<td><input name="<span style="background-color: rgb(255, 204, 204);">itemsList[${status.index }]</span>.price" value="${item.price }"/></td>
					<td><input name="itemsList[${status.index }].createtime" value="<fmt:formatDate value="${item.createtime }" pattern="yyyy-MM-dd HH:mm:ss" />"/></td>
					<td><input name="itemsList[${status.index }].detail" value="${item.detail }"/></td>
				</tr>
			</c:forEach>
		</table>
注:在controller方法的形参对象queryItemsCustomVo中定义了list集合类型的属性(看前面的queryItemsCustomVo的定义),页面中List类型的参数,需要通过包装类来进行接收,页面中的参数名称要与包装类中的属性名称一致。

四、Map集合类型的参数绑定

通过在包装类中定义Map对象,并添加get/set方法,action使用包装对象接收。包装类中定义的Map对象如下:

public class QueryVo{
private Map<String,Object><span style="background-color: rgb(255, 255, 102);"> itemInfo</span> = new HashMap<String, Object>();
//get/set方法
}
页面的定义如下:

<tr>
<td>学生信息:</td>
<td>姓名:<input type=”text” name=”<span style="background-color: rgb(255, 255, 51);">itemInfo[‘</span><span style="background-color: rgb(255, 204, 204);">name</span><span style="background-color: rgb(255, 255, 51);">’]</span>”/></td>
</tr>
controller方法的定义如下:

Public String useraddSubmit(QueryVo queryVo){}

同样的道理,页面中的参数名称对应于包装对象中的属性名称,页面参数中的name 就是map集合的key,输入的值,就是map集合的value







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值