2010-05-02 41 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(); 
    }*/ 

} 
创建