SSM整合之高级参数绑定

19 篇文章 0 订阅
12 篇文章 0 订阅

包装类型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实现方式大同小异,不再论述。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值