私は struts2 jasperreports-plugin を使用しており、アクションを呼び出す HTML レポートを生成しようとしています。
.jasper ファイルはiReportを使用して生成されます。
リストをデータソースとして使用してレポートを正常に生成しましたが、jdbc接続を使用しようとすると問題が発生します。
これは、チュートリアルに従って行ったことです。
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」に変更しました。その結果、null 値を持つ行が 1 つだけのレポートが得られます。
また、同じ接続を使用して出力ファイルを生成しようとしました。
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;
}
アクションを呼び出すと、表示されたレポートにはまだ null 値が含まれていますが、生成された html ファイルには、テーブルに格納されているすべてのデータが含まれています。
私はJasperReportsを初めて使用しましたが、何かが足りないのか、何か間違っているのかわかりません。
助けてくれてありがとう:)