版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fjnmbb12/article/details/73850208
包装类型pojo参数绑定
1 、需求
商品查询的Controller方法中实现商品查询条件的传入
2 、实现方法
第一种:在形参中添加HttpServletRequest request参数,通过request接收查询条件参数
第二种:在形参中使用包装类型的pojo接收查询条件参数。
分析:
页面传参数的特点:复杂,多样。条件包括:用户账号,商品编号,订单信息等
如果要将用户账号,商品编号,订单信息等全放在简单的pojo类(属性是简单类型的pojo类)中,pojo类属性比较多,繁乱,不便于维护和开发
建议使用包装类型的pojo,pojo中的属性是pojo类
3、页面参数和Controller方法形参的定义
页面定义的input的name需要和pojo扩展类定义的pojo简单类的类名一致,再.里面的变量名
即:itemsCustom和包装pojo中的属性一致即可
页面参数:
<td>商品名称:<input type="text" name="itemsCustom.name"></td>
Controller形参:
public ModelAndView queryItems(HttpServletRequest request,ItemsQueryVo itemsQueryVo) throws Exception{
pojo的包装类:
//商品信息
private Items items;
//为了系统的可扩展性,对原始生成的po进行扩展
private ItemsCustom itemsCustom;
集合类型参数绑定
数组绑定
1、需求
商品的批量删除,用户在页面选择多个商品,批量删除
2、持久层实现
使用逆向工程生成mapper里面的
deleteByPrimaryKey statement
3、业务层实现
接口类:
/**
* 删除商品
* @param id 商品ID
* @throws Exception
*/
public void deleteItems(Integer id) throws Exception;
实现类:
@Override
public void deleteItems(Integer id) throws Exception {
itemsMapper.deleteByPrimaryKey(id);
}
4、表现层实现
关键:将页面选择(多选)的商品id,传到controller方法的形参中,使用数组接收页面请求的多个商品的id
JSP页面定义:
<td><input type="checkbox" name="items_id" value="${item.id }"/></td>
controller方法定义:
//批量删除商品信息
@RequestMapping("/deleteItems")
public String deleteItems(Integer[] items_id) throws Exception{
//获取id数组,循环调用service删除商品
for (int i : items_id) {
itemsService.deleteItems(i);
}
return "redirect:queryItems.action";
}
5、总结
数组参数绑定只需命名与形参一致即可
list绑定
1、需求
通常我们在需要批量提交数据时,将提交的数据绑定到list<pojo>中,比如:成绩录入(批量提交,录入多门课成绩,批量提交)
本例子需求:批量商品修改,在页面输入多个商品信息,将多个商品信息提交到controller方法中
2、持久层实现
已写更新商品方法
3、业务层实现
已写更新商品方法
4、表现层实现
jsp页面定义:
<tr>
<td><input type="text" name="itemsList[${status.index}].name" value="${item.name }" /></td>
<td><input type="text" name="itemsList[${status.index}].price" value="${item.price }" /></td>
<td><input type="text" name="itemsList[${status.index}].createtime" value="${item.createtime }" /></td>
<td><input type="text" name="itemsList[${status.index}].detail" value="${item.detail }" /></td>
<<input type="hidden" name="itemsList[${status.index}].id" value="${item.id }">
</tr>
controller方法定义:
1、进入批量商品修改页面(页面样式参考itemsList.jsp)
//加载批量更新页面
@RequestMapping("/editItemsQuery")
public ModelAndView editItemsQuery() throws Exception{
//调用service查找数据库,查询商品列表
List<ItemsCustom> itemsList = itemsService.findItemsList(null);
//返回ModelAndView
ModelAndView modelAndView = new ModelAndView();
//相当于request的setAttribute,在jsp页面中通过itemsList取数据
modelAndView.addObject("itemsList",itemsList);
//指定视图
modelAndView.setViewName("items/editItemsQuery");
return modelAndView;
}
2、批量修改商品提交
//批量更新商品信息提交
//通过itemsQueryVo接受批量提交的商品信息,将商品信息存储到itemsQueryVo中itemsList属性中去
@RequestMapping("editItemsAll")
public String editItemsAll(ItemsQueryVo itemsQueryVo) throws Exception{
//获取到更新商品包装pojo类集合
List<ItemsCustom> list = itemsQueryVo.getItemsList();
//循环批量更新
for(ItemsCustom itemsCustom : list){
itemsService.updateItems(itemsCustom.getId(),itemsCustom);
}
return "success";
}
使用List接收页面批量提交的数据,通过包装pojo接收,在包装pojo中定义list<pojo>属性
//批量商品信息
private List<ItemsCustom> itemsList;
5、总结
如果要用list类型实现controller类的参数绑定,
先去包装的pojo类里定义一个泛型为pojo类(扩展类)的List集合,生成get set方法
然后去前端JSP页面,
规范input命名,格式为下图,
然后在controller内传入包装pojo类形参get到List集合即可。
Map类型绑定
也是通过在pojo包装类中定义一个map类型属性,与上面的List实现方式大同小异,不再论述。