bos 第4 (区域excel批量导入区域通用分页查询分区的添加分区多条件分页查询分区导出excel)
Posted 无极尊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bos 第4 (区域excel批量导入区域通用分页查询分区的添加分区多条件分页查询分区导出excel)相关的知识,希望对你有一定的参考价值。
BOS项目笔记 第4天
今天内容安排:
1、区域批量导入功能
jQuery OCUpload(一键上传插件)、apache POI、pinyin4j
2、实现区域的分页查询
3、对分页代码重构
4、添加分区(combobox下拉框)
5、分区的组合条件分页查询
6、分区数据导出功能
1. 区域数据批量导入功能
1.1 一键上传插件使用
ajax不能做文件上传。
第一步:在jsp页面中引入插件的js文件
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.ocupload-1.1.2.js"></script> |
第二步:在页面中提供任意一个元素
第三步:调用插件提供的upload方法,动态修改页面html代码
1.2 使用apache POI解析Excel文件
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
@Test public void test1() throws FileNotFoundException, IOException{ HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File("d:\\abc.xls"))); HSSFSheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { String v1 = row.getCell(0).getStringCellValue(); String v2 = row.getCell(1).getStringCellValue(); String v3 = row.getCell(2).getStringCellValue(); String v4 = row.getCell(3).getStringCellValue(); String v5 = row.getCell(4).getStringCellValue(); System.out.println(v1 + " " + v2+" " + v3+ " " +v4+ " " + v5); } } |
在RegionAction中提供导入方法:
public String importXls() throws Exception{ String flag = "1"; //使用POI解析Excel文件 try{ HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(myFile)); //获得第一个sheet页 HSSFSheet sheet = workbook.getSheetAt(0); List<Region> list = new ArrayList<Region>(); for (Row row : sheet) { int rowNum = row.getRowNum(); if(rowNum == 0){ //第一行,标题行,忽略 continue; } String id = row.getCell(0).getStringCellValue(); String province = row.getCell(1).getStringCellValue(); String city = row.getCell(2).getStringCellValue(); String district = row.getCell(3).getStringCellValue(); String postcode = row.getCell(4).getStringCellValue(); Region region = new Region(id, province, city, district, postcode, null, null, null); list.add(region); } regionService.saveBatch(list); }catch (Exception e) { flag = "0"; } ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8"); ServletActionContext.getResponse().getWriter().print(flag); return NONE; } |
1.3 使用Pinyin4J生成简码和城市编码
@Test public void test1(){ String province = "河北省"; String city = "石家庄市"; String district = "长安区"; //城市编码--->>shijiazhuang city = city.substring(0, city.length() - 1); String[] stringToPinyin = PinYin4jUtils.stringToPinyin(city); String citycode = StringUtils.join(stringToPinyin, ""); System.out.println(citycode);
//简码---->>HBSJZCA province = province.substring(0, province.length() - 1); district = district.substring(0, district.length() - 1); String info = province + city + district;//河北石家庄长安 String[] headByString = PinYin4jUtils.getHeadByString(info);
String shortcode = StringUtils.join(headByString, ""); System.out.println(shortcode); } |
2. 重构分页查询代码
l 在BaseAction中抽取PageBean对象
l 在BaseAction中提供setPage和setRows方法
l 在BaseAction中抽取条件查询对象
l 在BaseAction的构造方法中创建条件查询对象,并注入给PageBean对象
l 在BaseAction中抽取将PageBean对象转为json的方法
l 在StaffAction中分页方法
3. 添加分区
第一步:使用combobox展示区域数据到下拉框中
第二步:在RegionAction中提供listajax方法,查询所有的区域数据,返回json数据
为了使返回的json中含有name字段,需要在Region类中提供getName方法
4. 分区组合条件分页查询
第一步:为查询按钮绑定事件,调用datagrid的load方法,重新发起ajax请求,并且输入框提交参数
第二步:提供将表单输入项序列化为json的工具方法
第三步:修改SubareaAction中的分页查询方法,封装分页查询的条件
public String pageQuery() throws Exception{ //在查询之前,封装条件 DetachedCriteria detachedCriteria2 = pageBean.getDetachedCriteria(); String addresskey = model.getAddresskey(); Region region = model.getRegion(); if(StringUtils.isNotBlank(addresskey)){ //按照地址关键字模糊查询 detachedCriteria2.add(Restrictions.like("addressKey", addresskey)); } if(region != null){ //创建别名,用于多表关联查询 detachedCriteria2.createAlias("region", "r"); String province = region.getProvince(); String city = region.getCity(); String district = region.getDistrict(); if(StringUtils.isNotBlank(province)){ //按照省进行模糊查询 detachedCriteria2.add(Restrictions.like("r.province", "%"+province+"%")); } if(StringUtils.isNotBlank(city)){ //按照省进行模糊查询 detachedCriteria2.add(Restrictions.like("r.city", "%"+city+"%")); } if(StringUtils.isNotBlank(district)){ //按照省进行模糊查询 detachedCriteria2.add(Restrictions.like("r.district", "%"+district+"%")); } } subareaService.pageQuery(pageBean); String[] excludes = new String[]{"detachedCriteria","currentPage","pageSize","decidedzone","subareas"}; this.writePageBean2Json(pageBean, excludes); return NONE; } |
5. 分区数据导出功能
导出Excel文件提供客户下载。
第一步:为“导出”按钮绑定事件
第二步:在Action中提供导出方法
/** * 使用POI写入Excel文件,提供下载 * @throws IOException */ public String exportXls() throws IOException { List<Subarea> list = subareaService.findAll(); // 在内存中创建一个Excel文件,通过输出流写到客户端提供下载 HSSFWorkbook workbook = new HSSFWorkbook(); // 创建一个sheet页 HSSFSheet sheet = workbook.createSheet("分区数据"); // 创建标题行 HSSFRow headRow = sheet.createRow(0); headRow.createCell(0).setCellValue("分区编号"); headRow.createCell(1).setCellValue("区域编号"); headRow.createCell(2).setCellValue("地址关键字"); headRow.createCell(3).setCellValue("省市区");
for (Subarea subarea : list) { HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); dataRow.createCell(0).setCellValue(subarea.getId()); dataRow.createCell(1).setCellValue(subarea.getRegion().getId()); dataRow.createCell(2).setCellValue(subarea.getAddresskey()); Region region = subarea.getRegion(); dataRow.createCell(3).setCellValue(region.getProvince()+region.getCity()+region.getDistrict()); }
String filename = "分区数据.xls"; String agent = ServletActionContext.getRequest().getHeader("User-Agent"); filename = FileUtils.encodeDownloadFilename(filename, agent); //一个流两个头 ServletOutputStream out = ServletActionContext.getResponse().getOutputStream(); String contentType = ServletActionContext.getServletContext().getMimeType(filename); ServletActionContext.getResponse().setContentType(contentType); ServletActionContext.getResponse().setHeader("content-disposition", "attchment;filename="+filename); workbook.write(out); return NONE; } |
以上是关于bos 第4 (区域excel批量导入区域通用分页查询分区的添加分区多条件分页查询分区导出excel)的主要内容,如果未能解决你的问题,请参考以下文章