java.lang.IllegalStateException: getOutputStream() has already been called for this response在导出Excel表格的时候报这个错是什么原因啊?  如何解决???

解决方案 »

  1.   

    图片验证时,遇到过这个错
    代码中加上
    out.clear(); 
    out = pageContext.pushBody(); 
    试试
      

  2.   

    getOutputStream() has already been called for this response输出流以及被调用了,你代码里面有2次以上获取 out.getOutputStream()?代码肯定是有问题,把导出的那一段贴出来吧。
      

  3.   

    String fname = "Customization";// Excel文件名
    OutputStream out = response.getOutputStream();// 取得输出流
    response.reset();// 清空输出流
    response.setHeader("Content-disposition", "attachment; filename="
    + fname + ".xls");
    // 设定输出文件头,该方法有两个参数,分别表示应答头的名字和值
    response.setContentType("application/msexcel");
    //查询出所有的数据
    List<RequireInfo> rinfo = dao.getAll2();

    try {
    // 将 查询出来的数据 和 输出流对象传入该方法 并输出打印
    edao.createFixationSheet(rinfo, out);
    } catch (IOException e) {
    System.out.println(e.toString());
    e.printStackTrace();
    }
    out.flush();
      

  4.   

    public void createFixationSheet(List<RequireInfo> resurt, OutputStream out)
    throws IOException { // 创建 实例一个 Excel 工作薄 也就是 创建一个Excel 的项目
    wb = new HSSFWorkbook();
    // 设置工作薄的名称
    HSSFSheet sheet = wb.createSheet("my sheet"); wb.setSheetName(0, "所有的详细需求", HSSFWorkbook.ENCODING_UTF_16);
    // 创建row 第一行
    HSSFRow row = sheet.createRow((short) 0);
    // 列宽
    sheet.setDefaultColumnWidth((short) 20); sheet.createFreezePane(0, 1);
    createCell(wb, row, (short) 1, "备注"); if (null != resurt && resurt.size() > 0) {
    // 循环list数组 并动态打印 行与列
    for (int i = 0; i < resurt.size(); i++) {
    RequireInfo rinfo = resurt.get(i);
    int cid = resurt.get(i).getCid();
    int mid = resurt.get(i).getMid();
    SubverCInfo cinfo = dao.getById(cid);
    ReqAndNum rm = dao.getBymId(mid);
    if (rinfo != null) {
    // 创建第N行数据
    HSSFRow row2 = sheet.createRow((short) i + 1);

    createCell(wb, row2, (short) 1, rinfo.getRe());
    }
    }
    }
    // 将数据输出
    wb.write(out);
    }
      

  5.   

    response.reset();// 清空输出流这句删掉。
    建议楼主代码改下。1. 先组Excel报表。
    2. 在获取Response流。
    3. 导出。
    HSSFWorkbook wb = new HSSFWorkbook();
    String  fileName = "A.xls";
    createReport(wb, list);
    setHeader(response, fileName);
    WriteInReportByResponse(response, wb);public void WriteInReportByResponse(HttpServletResponse response,HSSFWorkbook wb) {
    try {
            OutputStream op = response.getOutputStream();   
            wb.write(op);
            op.flush();
            op.close();
        } catch (IOException e){
         log.error(e.getMessage());
        }
    }
       
    public void setHeader(HttpServletResponse response, String fileName) {
            response.setContentType("application/msexcel");
            response.setHeader("Pragma", "public");
            response.setHeader("Cache-Control", "max-age=0");
            response.setHeader("Content-disposition","attachment; filename="+fileName);
        }