2011-08-11 5 views
1

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와 데이터 형식을 가져오고, 빈은 DEF에서 가져옵니다. ABC에서 내비게이션을 표시하려고 할 때 위의 오류가 발생하지만 DEF에서 내비게이션을 받으면 모든 것이 정상입니다.

+0

ABC 클래스에 'mybean'이라는 이름의 속성이없는 것으로 보입니다 – Waqas

+0

예, 압니다 만 ABC는이 속성을가집니다. 내가 말했듯이 ABC는 DEF : DEF def에서 mybean을 얻습니다. mybean = def.getBean(); – Mateusz

+0

이 문제를 해결하는 데 도움이 될 수 있습니다 : http://jasperforge.org/plugins/espforum/view.php?group_id=102&forumid=103&topicid=54734 – Waqas

답변

0

해결했습니다. 필드라고하는 파일 중 하나가 대문자로 바뀌 었습니다. 재스퍼는이 문제에 대처할 수 없었습니다.

6

문제는 대문자로 시작하여 필드에 의해 발생합니다 :

private String AdresDysponenta; 

가 작은과

private String adresDysponenta; 

해야한다. getter와 setter의 이름은 동일하게 유지되어야합니다.

이것은 Jasper가 Apache Commons Beanutils (PropertyUtils 구체적)를 사용한다는 사실에서 유래했습니다. 사실은 여러분이 대문자로 시작하는 인스턴스 필드를 사용한다는 사실을 좋아하지 않습니다.

일반적인 규칙은 이름이 작은 문자로 시작하는 필드이지만, 게터/세터에서이 수도 :

private int foo; 

public int getFoo() { 
    return foo; 
} 

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

내 필드의 이름은 ABC, 그것은 같은 오류를했다. 변수 이름을 abc로 바꾼 다음 재 스퍼 보고서를 내보낼 수 있습니다

관련 문제