2014-06-17 23 views
0

我不明白爲什麼我的代碼不是一直在運行。 我打開了一個jasper報告,但是對於前4個打開時間,報告被緩存或者代碼沒有執行(新的StreamResource中的代碼沒有執行第4次)。新的StreamResource.StreamSource()僅在5次運行原因?前4次我得到舊的,緩存的,臨時或我的事件不知道什麼是與舊參數的PDF文件。StreamResource,ByteArray問題

也許有人知道這個問題?

public static void open(final String fileName, final HashMap<String, Object> data) { 
    mylog.pl("@@@ Param's print @ open Report: Filename:" + fileName); 
    try { 
     Iterator<?> i = data.keySet().iterator(); 
     while (i.hasNext()) { 
      String id = i.next().toString(); 
      String value = (data.get(id) != null) ? data.get(id).toString() : "null"; 
      mylog.pl(" id: " + id + " value: " + value); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     mylog.pl(e.getMessage()); 
    } 
    StreamResource.StreamSource source = null; 
    source = new StreamResource.StreamSource() { 
     public InputStream getStream() { 
      byte[] b = null; 
      InputStream reportStream = null; 
      try { 
       reportStream = new BufferedInputStream(new FileInputStream(PATH + fileName + JASPER)); 
       b = JasperRunManager.runReportToPdf(reportStream, data, new JREmptyDataSource()); 
      } catch (JRException ex) { 
       ex.printStackTrace(); 
       mylog.pl("Err @ JR" + ex.getMessage()); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
       Utils.showMessage(SU.NOTFOUND); 
       return null; 
      } 
      return new ByteArrayInputStream(b); 
     } 
    }; 
    StreamResource resource = null; 
    resource = new StreamResource(source, fileName + PDF); 
    resource.setMIMEType("application/pdf"); 
    Page p = Page.getCurrent(); 
    p.open(resource, "Report", false); 
} 

回答

0

這裏is答案

我所有的時間用來resource.setCacheTime(0);但真正需要resource.setCacheTime(1000);因爲

理論上< = 0禁用緩存。在實踐中,Chrome瀏覽器(和顯然,IE瀏覽器)都忽略< = 0。