BOS物流项目笔记复习+整理day06

    技术2024-11-07  8

    分区分页查询(没有过滤条件) subarea.hbm.xml的many to one要调整成lazy=“false”,立即加载

    服务端实现导出数据到excel 第一步:查询所有的分区数据 第二步:使用POI将数据写到Excel文件中 第三步:使用输出流进行文件下载

    public String exportXls() throws IOException{ //第一步:查询所有的分区数据 List<Subarea> list = subareaService.findAll(); //第二步:使用POI将数据写到Excel文件中 //在内存中创建一个Excel文件 HSSFWorkbook workbook = new HSSFWorkbook(); //创建一个标签页 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("位置信息"); headRow.createCell(4).setCellValue("省市区"); for (Subarea subarea : list) { HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); dataRow.createCell(0).setCellValue(subarea.getId()); dataRow.createCell(1).setCellValue(subarea.getStartnum()); dataRow.createCell(2).setCellValue(subarea.getEndnum()); dataRow.createCell(3).setCellValue(subarea.getPosition()); dataRow.createCell(4).setCellValue(subarea.getRegion().getName()); } //第三步:使用输出流进行文件下载(一个流、两个头) String filename = "分区数据.xls"; String contentType = ServletActionContext.getServletContext().getMimeType(filename); ServletOutputStream out = ServletActionContext.getResponse().getOutputStream(); ServletActionContext.getResponse().setContentType(contentType); //获取客户端浏览器类型 String agent = ServletActionContext.getRequest().getHeader("User-Agent"); filename = FileUtils.encodeDownloadFilename(filename, agent); ServletActionContext.getResponse().setHeader("content-disposition", "attachment;filename="+filename); workbook.write(out); return NONE; }

    Action中,如果是返回json,页面不刷新,返回为NONE;

    分页查询死循环问题: 如果两个对象互相引用,在转json的时候就会报异常。: there is a cycle in the hierarchy

    1、页面不需要展示关联数据时 解决:将关联对象属性排除掉 例如: 分页查询中,不需要展示的关联数据有当前页,每页大小,区域,定区这些数据给排除掉,放在new String[]这个数组中

    public String pageQuery() throws IOException{ decidedzoneService.pageQuery(pageBean); this.java2Json(pageBean, new String[]{"currentPage","detachedCriteria","pageSize","subareas","decidedzones"}); return NONE; //发送ajax请求,页面不刷新,返回NONE }

    2、页面需要展示关联数据时 解决:将关联对象改为立即加载,并且将关联对象中的属性排除 例如:lazy属性设置为false,立即加载

    <many-to-one lazy="false" name="staff" class="com.itheima.bos.domain.Staff" fetch="select"> <column name="staff_id" length="32" /> </many-to-one>
    Processed: 0.039, SQL: 9