首页 > 代码库 > bos 第4 (区域excel批量导入、区域通用分页查询、分区的添加、分区多条件分页查询、分区导出excel)

bos 第4 (区域excel批量导入、区域通用分页查询、分区的添加、分区多条件分页查询、分区导出excel)

BOS项目笔记 第4

 

今天内容安排:

1、区域批量导入功能

jQuery OCUpload(一键上传插件)、apache POIpinyin4j

2、实现区域的分页查询

3、对分页代码重构

4、添加分区(combobox下拉框)

5、分区的组合条件分页查询

6、分区数据导出功能

 

1. 区域数据批量导入功能

1.1 一键上传插件使用

ajax不能做文件上传。

第一步:在jsp页面中引入插件的js文件

<script type="text/javascript" src="http://www.mamicode.com/${pageContext.request.contextPath }/js/jquery.ocupload-1.1.2.js"></script>

第二步:在页面中提供任意一个元素

 

第三步:调用插件提供的upload方法,动态修改页面html代码

 

 

1.2 使用apache POI解析Excel文件

Apache POIApache软件基金会的开放源码函式库,POI提供APIJava程序对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. 重构分页查询代码

BaseAction中抽取PageBean对象

 

BaseAction中提供setPagesetRows方法

 

BaseAction中抽取条件查询对象

 

BaseAction的构造方法中创建条件查询对象,并注入给PageBean对象

 

BaseAction中抽取将PageBean对象转为json的方法

 

StaffAction中分页方法

 

 

3. 添加分区

 

第一步:使用combobox展示区域数据到下拉框中

 

 

第二步:在RegionAction中提供listajax方法,查询所有的区域数据,返回json数据

 

为了使返回的json中含有name字段,需要在Region类中提供getName方法

 

 

4. 分区组合条件分页查询

 

第一步:为查询按钮绑定事件,调用datagridload方法,重新发起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)