【问题标题】:Struts2 jasperreports-plugin: unable to generate report using jdbc connectionStruts2 jasperreports-plugin:无法使用 jdbc 连接生成报告
【发布时间】:2014-11-07 12:43:46
【问题描述】:

我正在使用 struts2 jasperreports-plugin,我正在尝试生成一个调用操作的 HTML 报告。

.jasper 文件是使用 iReport 生成的。

我使用列表作为数据源成功生成了报告,但尝试使用 jdbc 连接时遇到了一些问题。

这是我在tutorial之后所做的。

public class JasperReportAction extends ActionSupport {

    private List<User> users;
    //getters and setters

    public String getTestReport() {
        User u1 = new User();
        User u2 = new User();
       setSomeParameters(u1, u2);

        users.add(u1);
        users.add(u2);

        return SUCCESS;
    }
}

这是我在 struts.xml 文件中添加的内容:

<package name="jasperreport" namespace="/reports" extends="jasperreports-default">
    <action name="myJasperTest" class="[...]JasperReportAction" method="getTestReport">
        <result name="success" type="jasper" >
            <param name="location">report2.jasper</param>
            <param name="dataSource">users</param> 
            <param name="format">HTML</param>
        </result>
    </action>
</package>

这很有效。我的报告包含列表中定义的数据。 我尝试修改我的操作以建立 jdbc 连接,使用简单的“选择”查询检索数据:

 public class JasperReportAction extends ActionSupport {
    private java.sql.Connection sqlConnection;
    //getters and setters..

    public String getTestReport() {
        try {
            sqlConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "pwd");
        }
        catch(Exception e) {
            return ERROR;
        }
        return SUCCESS;
    }
}

struts.xml 中,我将数据源更改为“sqlConnection”。 结果,我得到了一份报告,其中只有一行具有空值。

我也尝试使用相同的连接生成输出文件:

public String getTestReport() {
        try {
            sqlConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "pwd");

            JasperReport report = JasperCompileManager.compileReport("report2.jrxml");
            JasperPrint print = JasperFillManager.fillReport(report, new HashMap<String, Object>(), sqlConnection);
             JasperExportManager.exportReportToHtmlFile(print, "repo.html");
        }
        catch(Exception e) {
            return ERROR;
        }

        return SUCCESS;
    }

当我调用该操作时,显示的报告仍然包含空值,但生成的 html 文件包含存储在表中的所有数据。

我是 JasperReports 的新手,我不知道我是否遗漏了什么或做错了什么。

提前感谢您的帮助:)

【问题讨论】:

    标签: java jdbc struts2 jasper-reports


    【解决方案1】:

    根据struts2-jasperreports-plugindocumentation要使用JDBC连接,你需要在connection参数中定义它。

    <package name="jasperreport" namespace="/reports" extends="jasperreports-default">
        <action name="myJasperTest" class="[...]JasperReportAction" method="getTestReport">
            <result name="success" type="jasper" >
                <param name="location">report2.jasper</param>
                <param name="connection">sqlConnection</param> 
                <param name="format">HTML</param>
            </result>
        </action>
    </package>
    

    别忘了为sqlConnection 创建getter/setter。

    【讨论】:

    • 谢谢!我没有太在意连接参数,我只关注数据源.. :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    相关资源
    最近更新 更多