【问题标题】:Error retrieving field检索字段时出错
【发布时间】:2011-10-24 19:40:37
【问题描述】:

我对 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,一切正常。

【问题讨论】:

  • 从错误看来您的 ABC 类没有名为“mybean”的属性
  • 是的,我知道,但是 ABC 有这个属性。正如我提到的,ABC 从 DEF 获取 mybean:DEF def; mybean = def.getBean();
  • 这可以帮助您解决问题:jasperforge.org/plugins/espforum/…
  • 你能发布你的 bean 定义吗?

标签: java hibernate web-applications jasper-reports


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    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;
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        相关资源
        最近更新 更多