客户需求:
用户在市场活动主页面,选择要导出的市场活动,点击"选择导出"按钮,把所有选择的数据生成一个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中的文件完全来源于数据库。
点击选择下载按钮,什么都没有选择时,弹出至少选择一条市场活动
选择两个市场活动进行下载
查看下载的数据