用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();
}
展开
 我来答
痴情的张无忌
2011-08-18 · TA获得超过532个赞
知道小有建树答主
回答量:557
采纳率:0%
帮助的人:187万
展开全部
我看了一下楼主的代码,没有错误,
你是直接采用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的值了,.
不知道,这样说明白了没? 如果没有明白,就继续问吧?
区烁01T
2011-08-19 · 贡献了超过196个回答
知道答主
回答量:196
采纳率:0%
帮助的人:43.8万
展开全部
还没处理好?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Annie709
2011-08-23 · TA获得超过264个赞
知道小有建树答主
回答量:374
采纳率:0%
帮助的人:411万
展开全部
ireport制作报表这么复杂,幸亏没选啊...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式