检索字段时出错

时间:2011-08-11 09:34:57

标签: java hibernate web-applications jasper-reports

我遇到了JasperReports的问题。尝试从数据库下载数据时,出现此错误:

net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : mybean
    at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:123)
    at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:96)
    at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:100)
    at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:821)
    at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:785)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1482)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:126)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:864)
    at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:540)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:324)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:513)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
Caused by: java.lang.NoSuchMethodException: Unknown property 'mybean' on class 'class com.mg.shared.ABC'
    at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1322)
    at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:770)
    at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:846)
    at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
    at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
    ... 31 more

这个问题对我来说很奇怪,因为mybean在ABC。更重要的是,我的班级 ABC从其他类DEF中获取一些数据,mybean来自DEF。当我试图从ABC显示mybean时,我发现上面的错误,但如果我从DEF获取mybean,一切都还可以。

3 个答案:

答案 0 :(得分:6)

问题是由以大写字母开头的字段引起的:

private String AdresDysponenta;

应该是

private String adresDysponenta;

小a。 getter和setter的名称应该保持不变。

这是因为Jasper使用的是Apache Commons Beanutils(特别是PropertyUtils),它不喜欢你使用带有大写字母的开头的实例字段这一事实。

一般约定是字段名称以小写字母开头,但在getter / setter中它是一个大写字母:

private int foo;

public int getFoo() {
  return foo;
}

public void setFoo(int foo) {
  this.foo = foo;
}

答案 1 :(得分:1)

我的字段名称是aBC,它遇到了同样的错误。只需将变量重命名为abc,然后就可以导出jasper报告

答案 2 :(得分:0)

我解决了。事实证明,我称之为字段的文件之一是大写的。贾斯珀无法应付这一点。