用Ireport设计的报表,在java程序中填充报错! 100
这是用Ireport做的一个报表,在java填充数据时报错!报错在这行:print=JasperFillManager.fillReport(path,null,ds);...
这是用Ireport做的一个报表,在java填充数据时报错!
报错在这行:print = JasperFillManager.fillReport(path, null,ds);
报错的那个字段为联合主键中一个字段!(ABCYNO)说什么那个字段无法映射!
//得到数据集
List list=f554141service.printDetail(instance);
System.out.println("list.size()================="+list.size());
//将集合封装为数据源
JRBeanCollectionDataSource ds=new JRBeanCollectionDataSource(list);
//目的
String path = request.getSession().getServletContext().getRealPath("/WEB-INF/classes/com/reports/printDetail.jasper");
//填充
JasperPrint print =null;
try {
print = JasperFillManager.fillReport(path, null,ds);
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 展开
报错在这行:print = JasperFillManager.fillReport(path, null,ds);
报错的那个字段为联合主键中一个字段!(ABCYNO)说什么那个字段无法映射!
//得到数据集
List list=f554141service.printDetail(instance);
System.out.println("list.size()================="+list.size());
//将集合封装为数据源
JRBeanCollectionDataSource ds=new JRBeanCollectionDataSource(list);
//目的
String path = request.getSession().getServletContext().getRealPath("/WEB-INF/classes/com/reports/printDetail.jasper");
//填充
JasperPrint print =null;
try {
print = JasperFillManager.fillReport(path, null,ds);
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 展开
3个回答
展开全部
我看了一下楼主的代码,没有错误,
你是直接采用jasper.xml生成报表, 在填充数据的那一段报错,很有可能是获取list集合的时候,有问题导致,
如果是采用Hibernate,检查一下,你的字段的映射关系,
最好能把错误也贴出来,我们也能帮你分析一下:
以下是我之前使用ireport工具做报表的代码:希望能带来帮助,
/**
*生成报表方法;
*/
public ByteArrayOutputStream generatePdf(String jasperFile, HashMap map,
Collection beanCollection, ResourceBundle bundle, Locale locale) {
logger.info("Start generatePdf with bean collection, jasper file: " + jasperFile);
ByteArrayOutputStream out = new ByteArrayOutputStream();
if (map == null)
map = new HashMap();
if (locale != null)
//传入国际化文件;
map.put(JRFillParameter.REPORT_LOCALE, locale);
map.put(JRFillParameter.REPORT_RESOURCE_BUNDLE, bundle);
//获取Inputstream流;
InputStream in = ReportGeneratorImpl.class.getClassLoader()
.getResourceAsStream(jasperFile + ".jrxml");
try {
//编译成jasper.xml文件;
JasperReport jreport = JasperCompileManager.compileReport(in);
//填充报表;参数为,jasper文件,map集合,数据源;
JasperPrint print = JasperFillManager.fillReport(jreport, map,
new JRBeanCollectionDataSource(beanCollection));
//最后导出到outputStream;
JasperExportManager.exportReportToPdfStream(print, out);
} catch (JRException e) {
logger.logExceptionCaught(e);
} finally {
try {
logger.info("Close input stream");
in.close();
} catch (Exception e) {
logger.logExceptionCaught(e);
}
}
return out;
}
}
你是直接采用jasper.xml生成报表, 在填充数据的那一段报错,很有可能是获取list集合的时候,有问题导致,
如果是采用Hibernate,检查一下,你的字段的映射关系,
最好能把错误也贴出来,我们也能帮你分析一下:
以下是我之前使用ireport工具做报表的代码:希望能带来帮助,
/**
*生成报表方法;
*/
public ByteArrayOutputStream generatePdf(String jasperFile, HashMap map,
Collection beanCollection, ResourceBundle bundle, Locale locale) {
logger.info("Start generatePdf with bean collection, jasper file: " + jasperFile);
ByteArrayOutputStream out = new ByteArrayOutputStream();
if (map == null)
map = new HashMap();
if (locale != null)
//传入国际化文件;
map.put(JRFillParameter.REPORT_LOCALE, locale);
map.put(JRFillParameter.REPORT_RESOURCE_BUNDLE, bundle);
//获取Inputstream流;
InputStream in = ReportGeneratorImpl.class.getClassLoader()
.getResourceAsStream(jasperFile + ".jrxml");
try {
//编译成jasper.xml文件;
JasperReport jreport = JasperCompileManager.compileReport(in);
//填充报表;参数为,jasper文件,map集合,数据源;
JasperPrint print = JasperFillManager.fillReport(jreport, map,
new JRBeanCollectionDataSource(beanCollection));
//最后导出到outputStream;
JasperExportManager.exportReportToPdfStream(print, out);
} catch (JRException e) {
logger.logExceptionCaught(e);
} finally {
try {
logger.info("Close input stream");
in.close();
} catch (Exception e) {
logger.logExceptionCaught(e);
}
}
return out;
}
}
追问
就是采用hibernate自动生成的关系,因为有联合主键生成了一个id类, 故id类里面字段和ireport里面无法映射,要怎么处理联合主键生成的id类才能和ireport里面的正确映射呢?
追答
ireport里面,用到了联合主键,用法也是差不多, 因为你设置参数的时候,就可以通过:
obj对象.id类.id属性名的方式取得.
填充到对象里面去。 然后,在ireport中,就能获取这个传过来对象.id类.id的值了,.
不知道,这样说明白了没? 如果没有明白,就继续问吧?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询