2013-11-27 116 views
1

我写了一个简单的应用程序来从我的服务器上获取命令。我决定能够运行一些报告并在JasperViewer中显示它们,然后从那里决定是否打印或导出/保存为其他格式。它工作正常,当我运行在的NetBeans项目,但一旦我编译它,并将其发布到我的服务器,运行报告,但我不能让报告在JasperViewer打开。实际上,观众根本不会启动。Java Web Start应用程序中的JasperReports

这里是我的代码:

try { 
    Connection con = DriverManager.getConnection(
      "jdbc:mysql://MYDATABASE", 
      "MY_UN", 
      "MY_PW"); 

    java.sql.Statement stmt = con.createStatement(); 

    ResultSet rs = stmt.executeQuery("SELECT `Product_ID` AS PRODUCT_ID, `Name` AS PRODUCT_DESCRIPTION, `Qty` AS QTY, `Price` AS PRICE_EACH_LINE, `Line_Total` AS LINE_TOTAL_LINE FROM `orderlines`;"); 

    JRResultSetDataSource resultSetDataSource = new JRResultSetDataSource(rs); 

    final Map<String, Object> parameter = new HashMap<String, Object>(); 
    parameter.put("DEALER_NAME", "TY JACOBS"); 
    parameter.put("DEALER_STREET", "MY_ADDRESS"); 
    parameter.put("DEALER_CITY_STATE_ZIP", "MY_CITY_STATE_ZIP"); 
    parameter.put("DEALER_PHONE", "MY_PHONE_NUMBER"); 

    ClassLoader classloader = getClass().getClassLoader(); 
    InputStream url = null; 
    url = classloader.getResourceAsStream("OK/report3.jrxml"); 
    JasperReport jasperReport = JasperCompileManager.compileReport(url); 

    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameter, resultSetDataSource); 

    JasperViewer.viewReport(jasperPrint, false); 

} catch (SQLException|JRException ex) { 
    Logger.getLogger(DbReportDSFill.class.getName()).log(Level.SEVERE, null, ex); 
} 

还有一两件事,我可以在本地也没有问题运行它。它似乎只是我发布到服务器,我无法在JasperViewer得到报告。

回答

0

我想,我们有类似的情况。使用JasperViewer.viewReport(jasperPrint,false);时,它将显示在部署它的相同服务器上。所以当你在本地执行时,它可以在本地部署时正常工作。您可以验证试图从其他系统打你的本地URL,你会看到jasperviewer会在你的系统中打开,而不是从那里被调用。

以下是我们所做的:
转换为字节数组并将其传递到前端进行显示。

byte[] byteArray = JasperExportManager.exportReportToPdf(jasperPrint); 

然后httpServletResponse.getOutputStream().write(byteArray);

希望这有助于!

相关问题