ireport在jsp中显示问题

clqjdmb 2009-11-02 09:20:36
jrxml文件在IREPORT中正常,并且执行报表(使用动态连接也可以正常显示数据),请问在JSP中怎么调用这个文件呢(调用JSPER文件)? 为什么我下面的代码在浏览器中显示空白页面?若有错 可否那个模板看下
<%@page contentType="text/html;charset=UTF-8"%><%@page

import="net.sf.jasperreports.engine.export.JRHtmlExporterParameter,
net.sf.jasperreports.engine.JRExporter,
net.sf.jasperreports.engine.export.JRHtmlExporter,
net.sf.jasperreports.engine.export.JRPdfExporter,
net.sf.jasperreports.engine.export.JRXlsExporterParameter,
net.sf.jasperreports.engine.JasperPrint,
net.sf.jasperreports.engine.JRRuntimeException,
net.sf.jasperreports.engine.JasperFillManager,
net.sf.jasperreports.engine.JRExporterParameter,
net.sf.jasperreports.engine.export.JRXlsExporter,
java.util.HashMap,
java.util.Map,
java.util.Enumeration,
java.io.File,
java.sql.*,
net.sf.jasperreports.j2ee.servlets.*

"
%><%

//获取数据库连接,获取方法根据具体情况而定

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@134.128.5.253:1521:sposs","pingan","pingan");

//获取关键参数

String ls_reportname="test";//报表文件名
String ls_exporttype="HTML";//报表文件格式类型(页面html,excel,pdf)

if(ls_exporttype==null||"".equals(ls_exporttype))ls_exporttype="HTML";
else ls_exporttype=ls_exporttype.toUpperCase();
if(!("PDF".equals(ls_exporttype))&&!("EXCEL".equals(ls_exporttype)))ls_exporttype="HTML";

try {

//读取jasper文件



File reportFile = new File(application.getRealPath("/module/statistics/report/test.jasper"));
if (!reportFile.exists())
throw new JRRuntimeException("File "+ reportFile.toString()+" not found!");

//创建parameter对象

Map parameters = new HashMap();
String year = request.getParameter("year");
String month = request.getParameter("month");
String areaid = request.getParameter("areaid");

parameters.put("yearnum", year);
parameters.put("monthnum",month);
parameters.put("areaid",areaid);


JasperPrint jasperPrint =
JasperFillManager.fillReport(
reportFile.getPath(),
parameters,
conn
);
conn=null;
JRHtmlExporter exporter = null;
ServletOutputStream ouputStream = null;

//显示报表的文件格式
exporter = new JRHtmlExporter();
exporter.setParameter(JRHtmlExporterParameter.OUTPUT_FILE_NAME,ls_reportname+".html");
exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "<div style=\"page-break-after:always\"></div>");
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.exportReport();
}
catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
out.println(e.getMessage());
}

finally{
conn=null;
}

%>
...全文
479 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
chendejiang 2010-09-01
  • 打赏
  • 举报
回复
推荐jasperreport QQ群121174498
8错的群
ivylkl 2009-12-30
  • 打赏
  • 举报
回复
?
clqjdmb 2009-11-09
  • 打赏
  • 举报
回复
我只不过结贴比较慢而已 至于这么激动嘛。。。
努力 2009-11-09
  • 打赏
  • 举报
回复
不结贴的人,记住你了,下次不回答你任何问题。
努力 2009-11-06
  • 打赏
  • 举报
回复
大概知道你错到那了,传ArrayList进JasperRunManager.runReportToPdfStream(reportStream, out, pman, new JRBeanArrayDataSource(storedata));时,这个storedata是ArrayList用.toArray();转换过的,不然就是空白报表了。呵呵,小朋友,拿什么奖励我呢?花这么多精力在你身上。嘿嘿...
努力 2009-11-06
  • 打赏
  • 举报
回复
在detail里可以放静态文本的,是没关系的。你出现的问题:是在JasperRunManager的方法使用上。好好试一下吧。
clqjdmb 2009-11-05
  • 打赏
  • 举报
回复
//获取数据库连接,获取方法根据具体情况而定

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@134.128.5.253:1521:sposs","pingan","pingan");

//获取关键参数

String ls_reportname="test";//报表文件名
String ls_exporttype="PDF";//报表文件格式类型(页面html,excel,pdf)
String yearnum = request.getParameter("year");
String monthnum = request.getParameter("month");
String areaid = request.getParameter("areaid");
try {

//读取jasper文件



File reportFile = new File(application.getRealPath("/module/statistics/report/test.jasper"));


//创建parameter对象

Map parameters = new HashMap();

parameters.put("yearnum",yearnum);
parameters.put("monthnum",monthnum);
parameters.put("areaid",areaid);





byte[] jrm = JasperRunManager.runReportToPdf(
reportFile.getPath(),
parameters,
conn);
response.setContentType("application/pdf");
response.setContentLength(jrm.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(jrm, 0, jrm.length);
ouputStream.flush();
ouputStream.close();
}catch(Exception e){
e.printStackTrace();
}
finally{
conn.close();
}
现在这样写的话,页面可以显示调出PDF 但是是空白页面 没有内容
clqjdmb 2009-11-05
  • 打赏
  • 举报
回复
我IREPORT 里的数据源就是javabean, 而且IREPORT里直接执行报表是正确的, 不过我想问下,我在detail 这一栏里也有放静态文本,这个应该没有关系吧。
烟雨鹏城 2009-11-05
  • 打赏
  • 举报
回复
展现报表jsp
<%@ page errorPage="error.jsp" %>
<%@ page import="datasource.*" %>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="net.sf.jasperreports.engine.util.*" %>
<%@ page import="net.sf.jasperreports.engine.export.*" %>
<%@ page import="net.sf.jasperreports.j2ee.servlets.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>

<%
File reportFile = new File(application.getRealPath("/reports/WebappReport.jasper"));
if (!reportFile.exists())
throw new JRRuntimeException("File WebappReport.jasper not found. The report design must be compiled first.");

JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());

Map parameters = new HashMap();
parameters.put("ReportTitle", "Address Report");
parameters.put("BaseDir", reportFile.getParentFile());

JasperPrint jasperPrint =
JasperFillManager.fillReport(
jasperReport,
parameters,
new WebappDataSource()
);

JRHtmlExporter exporter = new JRHtmlExporter();

session.setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "../servlets/image?image=");

exporter.exportReport();
%>

报表数据获得类
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;


/**
* @author Teodor Danciu (teodord@users.sourceforge.net)
* @version $Id: WebappDataSource.java 3031 2009-08-27 11:14:57Z teodord $
*/
public class WebappDataSource implements JRDataSource
{


/**
*
*/
private Object[][] data =
{
{"Berne", new Integer(22), "Bill Ott", "250 - 20th Ave."},
{"Berne", new Integer(9), "James Schneider", "277 Seventh Av."},
{"Boston", new Integer(32), "Michael Ott", "339 College Av."},
{"Boston", new Integer(23), "Julia Heiniger", "358 College Av."},
{"Chicago", new Integer(39), "Mary Karsen", "202 College Av."},
{"Chicago", new Integer(35), "George Karsen", "412 College Av."},
{"Chicago", new Integer(11), "Julia White", "412 Upland Pl."},
{"Dallas", new Integer(47), "Janet Fuller", "445 Upland Pl."},
{"Dallas", new Integer(43), "Susanne Smith", "2 Upland Pl."},
{"Dallas", new Integer(40), "Susanne Miller", "440 - 20th Ave."},
{"Dallas", new Integer(36), "John Steel", "276 Upland Pl."},
{"Dallas", new Integer(37), "Michael Clancy", "19 Seventh Av."},
{"Dallas", new Integer(19), "Susanne Heiniger", "86 - 20th Ave."},
{"Dallas", new Integer(10), "Anne Fuller", "135 Upland Pl."},
{"Dallas", new Integer(4), "Sylvia Ringer", "365 College Av."},
{"Dallas", new Integer(0), "Laura Steel", "429 Seventh Av."},
{"Lyon", new Integer(38), "Andrew Heiniger", "347 College Av."},
{"Lyon", new Integer(28), "Susanne White", "74 - 20th Ave."},
{"Lyon", new Integer(17), "Laura Ott", "443 Seventh Av."},
{"Lyon", new Integer(2), "Anne Miller", "20 Upland Pl."},
{"New York", new Integer(46), "Andrew May", "172 Seventh Av."},
{"New York", new Integer(44), "Sylvia Ott", "361 College Av."},
{"New York", new Integer(41), "Bill King", "546 College Av."},
{"Oslo", new Integer(45), "Janet May", "396 Seventh Av."},
{"Oslo", new Integer(42), "Robert Ott", "503 Seventh Av."},
{"Paris", new Integer(25), "Sylvia Steel", "269 College Av."},
{"Paris", new Integer(18), "Sylvia Fuller", "158 - 20th Ave."},
{"Paris", new Integer(5), "Laura Miller", "294 Seventh Av."},
{"San Francisco", new Integer(48), "Robert White", "549 Seventh Av."},
{"San Francisco", new Integer(7), "James Peterson", "231 Upland Pl."}
};

private int index = -1;


/**
*
*/
public WebappDataSource()
{
}


/**
*
*/
public boolean next() throws JRException
{
index++;

return (index < data.length);
}


/**
*
*/
public Object getFieldValue(JRField field) throws JRException
{
Object value = null;

String fieldName = field.getName();

if ("City".equals(fieldName))
{
value = data[index][0];
}
else if ("Id".equals(fieldName))
{
value = data[index][1];
}
else if ("Name".equals(fieldName))
{
value = data[index][2];
}
else if ("Street".equals(fieldName))
{
value = data[index][3];
}

return value;
}


}
clqjdmb 2009-11-05
  • 打赏
  • 举报
回复
TO 小小: 不好意思,这几天干别的了 现在才来
如果方法改成你这样的话,那输出的这个是不是也要改? 改成?
exporter = new JRHtmlExporter();
exporter.setParameter(JRHtmlExporterParameter.OUTPUT_FILE_NAME,ls_reportname+".html");
exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, " <div style=\"page-break-after:always\"> </div>");
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.exportReport();
}
努力 2009-11-05
  • 打赏
  • 举报
回复
byte[] jrm = JasperRunManager.runReportToPdf(
reportFile.getPath(),
parameters,
conn);

你可能是用的方法不对,以前贴的是我大概的印象,今天查看原来的代码,几乎用的都是runReportToPdfStream.另外,我建议用javabean传值,这样便于调试与修改,比较清楚。
努力 2009-11-05
  • 打赏
  • 举报
回复
给你个我写过的例子,算是经验吧。
当jasper中无sql时,就是在java中写sql得到数据集用javabean传值,用下面这种方法。同样适合只在hashmap中put值的情况:

if(pdf_or_excel.trim().equals("pdf")){
//print .pdf document
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline;filename=print.pdf");
InputStream reportStream = null;
reportStream = this.getServlet().getServletContext().getResourceAsStream("report/invoice/invoiceexedit_fapiao_sh_n.jasper");
try {
JasperRunManager.runReportToPdfStream(reportStream, out, pman, new JRBeanArrayDataSource(storedata));
} catch (RuntimeException e) {
e.printStackTrace();
}finally{
out.flush();
out.close();
}
}

当jasper中有sql在执行时,用下面这种方式:

InputStream reportStream = null;
reportStream = this.getServlet().getServletContext().getResourceAsStream("report/bill_draft.jasper");

JdbcDAO jdbcDAO = (JdbcDAO) getBean("jdbcDAO");
Connection connection = jdbcDAO.getDBConnect();

JasperRunManager.runReportToPdfStream(reportStream, out, paraMap,
connection);


另处,好像你的参数个数不大对吧,你查一下文档,看一下吧。
老张-AI 2009-11-02
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20040728/11/3217960.html

楼主去看看这个帖子的回复 有例子
老张-AI 2009-11-02
  • 打赏
  • 举报
回复
路过

帮顶下
min123456520 2009-11-02
  • 打赏
  • 举报
回复
没实际用过.期待帮忙!

up
努力 2009-11-02
  • 打赏
  • 举报
回复
JasperRunManager.runReportToPdf(
reportFile.getPath(),
parameters,
conn);
改成这个,你用错方法了。这个调jsper文件有大致三种情况,不同的情况下,调的方法也不是一样的。拿你这个来说,sql写没写在jasper中,这个写法就不一样。
clqjdmb 2009-11-02
  • 打赏
  • 举报
回复
test.jasper

里面配置yearnum,monthnum,areaid 字段了吗?

有配置, 三个都有
yangxuebao123 2009-11-02
  • 打赏
  • 举报
回复
如果有的话就会显示的
yangxuebao123 2009-11-02
  • 打赏
  • 举报
回复
test.jasper

里面配置yearnum,monthnum,areaid 字段了吗?
「已注销」 2009-11-02
  • 打赏
  • 举报
回复
控制台没有报错误吗?

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧