2011-05-04 109 views
0

你好傢伙 我正在發送我的表單值到控制器和控制器到rptdesign文件我正在用適當的值生成臨時文件夾中的報告,但我的要求是它應該用戶保存或打開對話框使用戶可以保存,我認爲Ajax請求將不允許下載任何文件,所以如果有人知道更好的解決方案的報告或開 PLZ回覆Birt Report not in PDF

我控制器低於

@RequestMapping("/leave/generateEmpLeaveReport.json") 
public void generateEmployeeLeaveReport(HttpServletRequest request, 
     HttpServletResponse response) throws Exception { 
    String reportName = "D:/git-repositories/cougar_leave/src/java/com//report/myLeaveSummary.rptdesign"; 
    File designTemplateFile = new File(reportName); 
    if (!designTemplateFile.exists()) { 
     throw new FileNotFoundException(reportName); 
    } 

    Map<String, Object> parameters = new HashMap<String, Object>(); 
    parameters.put("empId", NumberUtils.toInt(request.getParameter("id"))); 
    parameters.put("reportTitle", "EMPLOYEE LEAVE"); 
    parameters.put("fromDate", request.getParameter("fromDate")); 
    parameters.put("toDate", request.getParameter("toDate")); 
    parameters.put("leaveType", 
      NumberUtils.toInt(request.getParameter("leaveType"))); 
    parameters.put("transactionType", 
      NumberUtils.toInt(request.getParameter("transactionType"))); 
    reportManager.addSystemParams(parameters, null, 
      RequestUtils.getUser(request)); 
    File file = null; 
    try { 
     ReportType reportType = ReportType.PDF; 
     OfflineReportContext reportContext = new OfflineReportContext(
       reportName, reportType, parameters, null, 
       "EMPLOYEE LEAVE SUMMARY"); 

     StringBuffer buffer = new StringBuffer(); 
     file = offlineReportGenerator.generateReportFile(reportContext, 
       buffer); 
     ControllerUtils 
       .openFile(file.getParent(), response, file.getName()); 
    } catch (Exception e) { 
     log.error(e, e); 
    } finally { 
     if (file != null && file.exists()) { 
      file.canExecute(); 
     } 
    } 

} 

我的AJAX請求低於

generateReport : function() { 
     if (this.form.valid()) { 
      fromDate = new Date($("input[name='fromDate']").val()) 
      toDate = new Date($("input[name='toDate']").val()) 
      if (fromDate > toDate) { 
       GtsJQuery 
         .showError("To date should be greater or equals than From date !") 
      } else { 

       var request = GtsJQuery.ajax3(GtsJQuery.getContextPath() 
           + '/leave/generateEmpLeaveReport.json', { 
          data : { 
           id : $("input[name='employeeId']").val(), 
           fromDate : $("input[name='fromDate']") 
             .val(), 
           toDate : $("input[name='toDate']").val(), 
           leaveType : $("select[name='leaveType']") 
             .val(), 
           transactionType : $("select[name='transactionType']") 
             .val(), 
           orderBy : $("select[name='orderBy']").val() 
          } 
         }); 
       request.success(this.callback("onSubscribeSuccess")) 
      } 
     } 
    }, 

回答

0

控制器響應應該是臨時文件本身,只需調整內容類型即可。