第3章业务功能开发(选择导出市场活动,apache-poi)

客户需求:

用户在市场活动主页面,选择要导出的市场活动,点击"选择导出"按钮,把所有选择的数据生成一个excel文件,弹出文件下载的对话框;

用户选择要保存的目录,完成选择导出市场活动的功能.

    *每次至少选择导出一条记录

*导出成功之后,页面不刷新

功能开发:

1.根据客户需求绘画出UML时序图

 2.功能开发,mapper层

ActivityMapper接口

 

ActivityMapper.xml

 

3.service层

ActivityService接口

 

ActivityServiceImpl

 

4.Controller层

ActivityController

   @RequestMapping(value = "/workbench/activity/queryCheckedActivity.do")
    public void exportCheckedActivitys(HttpServletResponse response,HttpServletRequest request) throws IOException {
        //获取参数
        String checkedIds = request.getParameter("checkedIds");
        System.out.println("获取的参数:" + checkedIds);
        String[] ids = checkedIds.split(",");
        //调用service层方法,根据id查询市场活动
        List<Activity> activityList = activityService.queryCheckedActivity(ids);
        //创建excel文件,并且把activityList写入excel文件
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet("市场活动列表");
        HSSFRow row = sheet.createRow(0);
        HSSFCell cell;
        //表头
        String[] titles = {"ID", "所有者", "名称", "开始日期", "结束日期", "成本", "描述", "创建时间", "创建者", "修改时间", "修改者"};
        for (int i = 0; i < titles.length; i++) {
            cell = row.createCell(i);
            cell.setCellValue(titles[i]);
        }
        //遍历市场活动项
            if (activityList.size() > 0 && activityList != null) {
                //遍历activityList,创建HSSFRow对象,生成所有的数据行
                Activity activity = null;
                for (int i = 0; i < activityList.size(); i++) {
                    activity = activityList.get(i);
                    //每遍历出一个activity,生成一行
                    row = sheet.createRow(i + 1);
                    //每一行创建11列,每一列的数据从activity中获取
                    cell = row.createCell(0);
                    cell.setCellValue(activity.getId());
                    cell = row.createCell(1);
                    cell.setCellValue(activity.getOwner());
                    cell = row.createCell(2);
                    cell.setCellValue(activity.getName());
                    cell = row.createCell(3);
                    cell.setCellValue(activity.getCreateTime());
                    cell = row.createCell(4);
                    cell.setCellValue(activity.getEndDate());
                    cell = row.createCell(5);
                    cell.setCellValue(activity.getCost());
                    cell = row.createCell(6);
                    cell.setCellValue(activity.getDescription());
                    cell = row.createCell(7);
                    cell.setCellValue(activity.getCreateTime());
                    cell = row.createCell(8);
                    cell.setCellValue(activity.getCreateBy());
                    cell = row.createCell(9);
                    cell.setCellValue(activity.getEditTime());
                    cell = row.createCell(10);
                    cell.setCellValue(activity.getEditBy());
                }
            }
        //把生成的excel文件下载到客户端
        response.setContentType("application/octet-stream;charset=UTF-8");
        response.addHeader("Content-Disposition","attachment;filename=activityList.xls");
        OutputStream out=response.getOutputStream();

        wb.write(out);
        //关闭资源
        wb.close();
        out.flush();

    }

5.activity的index.jsp页面

   //给批量导出按钮添加单击事件
        $("#exportActivityAllBtn").click(function () {
            window.location.href="workbench/activity/exportAllActivitys.do";
        });

        //给选择导出按钮添加单击事件
        $("#exportActivityXzBtn").click(function () {
			//收集参数
			var checkIds=$("#tBody input[type='checkbox']:checked");
			//验证表单
			if (checkIds.size()==0){
				alert("至少选择一条需要导出的数据");
				return;
			}
			//拼接字符串
			var checkedIds=[];
			$.each(checkIds,function (i) {
				checkedIds[i]=$(this).val();
			});
			window.location.href="workbench/activity/queryCheckedActivity.do?checkedIds="+checkedIds;
		});

功能测试:

进入市场活动列表页面,点击下载列表数据(选择导出),会自动在自定义的serverDir生成excel文件,然后再下载到客户端,该excel中的文件完全来源于数据库。

点击选择下载按钮,什么都没有选择时,弹出至少选择一条市场活动

选择两个市场活动进行下载

 查看下载的数据

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做一道光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值