JSF和jasper的例子

时间:2010-05-02 10:44:40

标签: jsf jasper-reports

我是JSF的新手,我想将JSF与Jasper报告集成。我从服务器端生成自定义报告,该报告应使用JSF组件显示在UI中。 怎么做?您能否提供JSF和Jasper报告简单程序和所需的库。

3 个答案:

答案 0 :(得分:1)

假设您正在讨论JasperReports的HTML报告,最好的办法是在此阶段忘记JSF位,因为这与JasperReports无关。反过来,JSF也无法对“第三方”HTML做任何明智的事情。只需将一个HTML <iframe>元素添加到JSF页面,其src指向HttpServlet实例的URL,该实例根据请求参数或pathinfo返回所需的JasperReports HTML报告。 turn可以使用EL动态传递。 E.g:

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

HttpServlet url-pattern后面的/reportservlet只需按照其文档/教程调用JasperReports,获取InputStream并将其写入OutputStreamHttpServletResponse的1}}以及一组正确的响应标头中,至少Content-Type很重要。

答案 1 :(得分:0)

如果您想要HTML报告,BalusC建议似乎很好。 如果您想要任何其他格式(比如PDF)

,这是我的答案

在servlet上发出Ajax请求以“准备”报告并将其存储在某处,然后返回新创建的报告的ID。

响应成功或失败。如果成功,您将弹出一个带有假设URL的新窗口并将PDF文件流式传输到该窗口(使用您拥有的ID)

答案 2 :(得分:0)

您可以从以下链接下载jar

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

或者如果您正在使用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,CREDENTIALS和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();
    }*/

}