我是JSF的新手,我想将JSF与Jasper报告集成。我从服务器端生成自定义报告,该报告应使用JSF组件显示在UI中。 怎么做?您能否提供JSF和Jasper报告简单程序和所需的库。
答案 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
并将其写入OutputStream
在HttpServletResponse
的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();
}*/
}