Ошибка при получении поля - PullRequest
1 голос
/ 11 августа 2011

У меня проблема с 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.Когда я пытаюсь отобразить mybean из ABC, я получаю вышеуказанную ошибку, но если я получаю mybean из DEF, все в порядке.

Ответы [ 3 ]

6 голосов
/ 11 августа 2011

Проблема вызвана тем, что ваши поля начинаются с заглавной буквы:

private String AdresDysponenta;

должно быть

private String adresDysponenta;

с небольшим. Имена геттеров и сеттеров должны оставаться неизменными.

Это связано с тем, что Jasper использует Apache Commons Beanutils (особенно PropertyUtils), которому не нравится тот факт, что вы используете поле экземпляра, начинающееся с заглавной буквы.

Общее соглашение состоит в том, что имена полей начинаются с маленькой буквы, но в получателе / ​​установщике это заглавная буква:

private int foo;

public int getFoo() {
  return foo;
}

public void setFoo(int foo) {
  this.foo = foo;
}
1 голос
/ 14 марта 2013

мое поле имеет имя aBC, оно попало в ту же ошибку. просто переименуйте переменную в abc, тогда вы сможете экспортировать отчет о яшме

0 голосов
/ 11 августа 2011

Я решаю это.Оказалось, что один из файлов, которые я назвал полями, стал заглавным.Джаспер не мог справиться с этим.

...