• 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="${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;

    }

  • 相关阅读:
    iOS万能跳转界面的方法
    CocoaPods版本更新
    iOS--开发小技巧(持续更新)
    RunTime--手势应用场景(很方便)
    牛逼的标签效果(封装好)
    直播点赞动画
    UI基础--自定义UISwitch
    StatusBar 更改状态栏颜色(ios7)
    ios版本更新提示
    IOS 两个UIImage 合成一个Image
  • 原文地址:https://www.cnblogs.com/wujizun/p/6925961.html
Copyright © 2020-2023  润新知