创建一个zip文件。并管理输出流

时间:2014-03-21 15:47:22

标签: java javascript smartclient

我创建了一个允许创建zip文件的按钮。拉链文件的功能正常工作,但是当我通过按钮(在JS文件中)给她打电话时,它会崩溃并且它会给出一个空白页面(我想我不管理输出流) 会有点想法 这是我的代码:

按钮

   isc.ToolStripButton.create({
    ID: "BooksApp_GetXmlImage_Button"
    ,autoDraw:false
    ,icon: getUIIcon("icon_xml_16")
    ,prompt: getUIMsg("book_report_get_xml",4)
    ,showHover:true
    ,hoverStyle:"book_hover_style"
    ,click : function () {
        BooksApp_Action_loadFile("objx");
        // isc.say("test");
        }
});

function to call the zipfile() method:

     function BooksApp_Action_loadFile(p_UsedFormat) {
        var tmpBookID = BooksApp_Application.FP_BookID;
        var tmpIDs = BooksApp_Application.FP_fct_getSelectedPOVIDs();
        var tmpUsr_ID = FPIUser.FP_fct_getID();
        var tmpFormat = p_UsedFormat;

        var showInWindow=false;
        books_objects.exportData(
                {
                 r_book_idnum   :   tmpBookID
                ,sBook_ID       :   tmpBookID
                ,sPOV_IDs       :   tmpIDs
                ,sUser_ID       :   tmpUsr_ID
                ,sFormat        :   tmpFormat
                }
                ,{ operationId: "customExport" 
                    ,exportDisplay: (showInWindow ? "window" : "download") }
                ,function (dsResponse, data, dsRequest) {
                    //Never called
                    BooksApp_Action_Log("BooksApp_Action_loadFile:"+data);
                    }
                );
    }




customExport() function

    public static String customExport(RPCManager rpc,
                      HttpServletResponse response) throws Exception {
                String sReturn = _Return_OK;
                try {
                      // setting doCustomResponse() notifies the RPCManager that we'll
                      // bypass RPCManager.send
                      // and instead write directly to the servletResponse output stream
                      rpc.doCustomResponse();
                      RequestContext.setNoCacheHeaders(response);

                      writeServerDebug("customExport : start");
                      DSRequest req = rpc.getDSRequest();

                      List<?> results = req.execute().getDataList();

                      String sReqData = (String) req.getParameter("exportDisplay");
                      String sReqData_sBook_ID = "" + req.getCriteriaValue("sBook_ID");
                      String sReqData_sPOV_IDs = "" + req.getCriteriaValue("sPOV_IDs");
                      String sReqData_sUser_ID = "" + req.getCriteriaValue("sUser_ID");
                      String sReqData_sFormat = "" + req.getCriteriaValue("sFormat");

                      StringBuilder content = new StringBuilder("get (sReqData:"
                                  + sReqData + ",sBook_ID:" + sReqData_sBook_ID
                                  + ",sPOV_IDs:" + sReqData_sPOV_IDs + ",sUser_ID:"
                                  + sReqData_sUser_ID + ",sFormat:" + sReqData_sFormat + ")"
                                  + results.size() + " line(s):");

                      for (Iterator<?> i = results.iterator(); i.hasNext();) {
                            Map<?, ?> record = (Map<?, ?>) i.next();
                            content.append("\n" + Books.Column_IDNum + ":"
                                       + record.get(Books.Column_IDNum));
                            content.append("\n" + Books.Column_Name + ":"
                                       + record.get(Books.Column_Name));
                      }

                      writeServerDebug("The content is \n" + content.toString());

                      // Create the new Office Engine
                      OfficeEngine myOfficeEngine = new OfficeEngine();

                      boolean bIsConnected = myOfficeEngine._RepositoryBridge
                                  .connectSourceDataBase(false);
                      if (bIsConnected) {
                            //Connected to the repository, so get the files
                            if (sReqData_sFormat.equalsIgnoreCase("pdf") || sReqData_sFormat.equalsIgnoreCase("pptx")) {
                                  //The book end user format 
                                  String sReturnPptx = myOfficeEngine.performGeneratePptx(
                                             req.getHttpServletRequest(), response,
                                             sReqData_sBook_ID, sReqData_sPOV_IDs,
                                             sReqData_sUser_ID, sReqData_sFormat);
                                  writeServerDebug("customExport call performGeneratePptx, return is "
                                             + sReturnPptx);

                            }
                            else {
                                AppZip appZip = new AppZip();
                                appZip.ZipFile(" ", " ");

                                 String r = "sReturn_OK";;
                                 return r;
                            }
                            //Free the connection to repository
                            myOfficeEngine._RepositoryBridge.freeConnectionSource();
                      } else {
                            response.setContentType("text/plain");
                            response.addHeader("content-disposition",
                                       "attachment; filename=book.txt");
                            ServletOutputStream os = response.getOutputStream();
                            os.print(content.toString());
                            os.flush();
                      }
                } catch (Exception e) {
                      writeServerDebug("ERROR:" + e.getLocalizedMessage());
                      sReturn = Repository._Return_KO;
                }
                return sReturn;
          }

0 个答案:

没有答案