2010-05-02 105 views
0

我是JSF的新手,我想將Jasper報告集成到JSF中。我從服務器端生成自定義報告,該報告應該使用JSF組件顯示到UI中。 如何做到這一點?您能否提供JSF和Jasper Report Simple Program以及所需的庫?JSF和碧玉示例

回答

1

假設您正在討論JasperReports的HTML報告,最好的辦法就是在此階段忘記JSF位,因爲這與JasperReports無關。反過來,JSF也不能對「第三方」HTML做任何明智的事情。只需將HTML 元素添加到JSF頁面,該頁面的src指向HttpServlet實例的URL,該實例根據請求參數或pathinfo返回JasperReports的所需HTML報告,然後您可以使用EL動態傳遞該報告。例如:

<iframe width="600" height="400" src="reportservlet?id=${bean.someid}"></iframe> 

背後的/reportservleturl-pattern剛剛調用的JasperReports按照它的文檔/教程HttpServlet,獲得它的一個InputStream,並將其與正確設定的響應頭一起寫入HttpServletResponseOutputStream ,至少Content-Type是重要的。

0

BalusC建議似乎很好,如果你想要HTML報告。 這裏是我的答案,如果你想要任何其他格式(如PDF)

對servlet發出Ajax請求以「準備」報告並將其存儲在某處,然後返回新創建的報告的ID。

響應返回成功或失敗。在成功的情況下,你彈出一個新窗口,其中一個假想的URL和(使用你的ID)

0

您可以從下載JAR以下鏈接

http://www.java2s.com/Code/Jar/d/Downloaddynamicreportscore310jar.htm

,或者如果你的PDF文件流吧使用Maven,然後略低於依賴添加到您的pom.xml文件

<dependency> 
    <groupId>net.sourceforge.dynamicreports</groupId> 
    <artifactId>dynamicreports-core</artifactId> 
    <version>3.1.3</version> 
</dependency> 

XHTML頁面

<h:commandLink id="summary_jasper" actionListener="#{workReportBean.prepareJasperReport()}"> 
     <p:graphicImage name="/images/jasper.png" title="Jasper"/> 
</h:commandLink> 

Managed Bean的 //只需提供DB_NAME,憑證和TABLE_NAME,JASPER報告會爲你

public void prepareJasperReport(){ 
    Map<String, String> columnNameNTypeMap = new HashMap<String, String>(); 
    Connection connection = null; 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     connection = DriverManager.getConnection(
       "jdbc:mysql://localhost:3306/DB_NAME", "USER", "PASSWORD"); 
     ResultSet rsColumns = null; 
     DatabaseMetaData meta = connection.getMetaData(); 
     rsColumns = meta.getColumns(null, null, "TABLE_NAME", null); 
     while (rsColumns.next()) { 
      columnNameNTypeMap.put(rsColumns.getString("COLUMN_NAME"), rsColumns.getString("TYPE_NAME")); 
     }} catch (SQLException e) { 
     e.printStackTrace(); 
     return; 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
     return; 
    } 

    // a new report 
    JasperReportBuilder report = DynamicReports.report(); 
    // populating new report with TABLE object 
    report.setDataSource("select * from TABLE_NAME;", connection); 
    // creating COLUMNS // add extra datatypes if your table have ex. long, float etc 
    for (Map.Entry<String, String> entry : columnNameNTypeMap.entrySet()){ 
     if(entry.getValue().equalsIgnoreCase("int")){ 
      report.columns(Columns.column(entry.getKey(), entry.getKey(), DataTypes.integerType())); 
     }else if(entry.getValue().equalsIgnoreCase("varchar")){ 
      report.columns(Columns.column(entry.getKey(), entry.getKey(), DataTypes.stringType())); 
     }else if(entry.getValue().equalsIgnoreCase("bit")){ 
      report.columns(Columns.column(entry.getKey(), entry.getKey(), DataTypes.booleanType())); 
     }else if(entry.getValue().equalsIgnoreCase("datetime") || entry.getValue().equalsIgnoreCase("date")){ 
      report.columns(Columns.column(entry.getKey(), entry.getKey(), DataTypes.dateType())); 
     } 

    } 

    report.title(Components.text("Summary Report").setHeight(40) 
      .setStyle(DynamicReports.stl.style() 
      .setBold(true).setFontSize(16).setForegroundColor(Color.BLUE) 
      .setAlignment(HorizontalAlignment.CENTER, VerticalAlignment.MIDDLE))); 

    report.setColumnTitleStyle(DynamicReports.stl.style().setBold(true)); 
    report.setColumnStyle(DynamicReports.stl.style().setHorizontalAlignment(HorizontalAlignment.LEFT)); 
    report.setHighlightDetailEvenRows(true); 
    report.pageFooter(Components.pageXofY()); 

    try { 
     // show the report 
     report.show(false); 
     // export the report to a pdf file 
     //report.toPdf(new FileOutputStream("d://report.pdf")); 
    } catch (DRException e) { 
     e.printStackTrace(); 
    } /*catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    }*/ 

} 
創建