Pessoal, estou tentando gerar um arquivo excel utilizando o ireport. Estou recebendo esse erro:
net.sf.jasperreports.engine.JRException: Error retrieving field value from bean :
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 br.gov.pgfn.scif.web.controller.LoteRemessaController.fecharLote(LoteRemessaController.java:178)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoSuchMethodException: Unknown property ''
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1122)
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:686)
at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:290)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
... 40 more
classe Servidor
[code]@Entity
@Table(name=“servidor”)
public class Servidor extends AbstractBean implements Serializable {
private static final long serialVersionUID = 7831737513880564868L;
@Column(name="cpf", nullable=true, length=11)
private String cpf;
@NotEmpty
@Column(name="nome", nullable=true, length=70)
private String nome;
//get e set
}[/code]
Aqui eu gero o Excel, quando o método fecharLote() é chamado, no corpo dele, chamo o método gerarXSL() que gera o excel:
@Controller
@RequestMapping(value="/lote-remessa-form")
public class LoteRemessaController extends AbstractController {
@Autowired
private LoteRemessaFacadeService loteRemessaFacadeProxy;
@Autowired
private ServidorFacadeService servidorFacadeProxy;
protected final String fileSeparator = System.getProperty("file.separator");
private static final Logger logger = Logger.getLogger(JasperReportGenerator.class);
@RequestMapping(value="/fecharLote", method=RequestMethod.POST)
public String fecharLote(LoteRemessaFormBean loteRemessaFormBean, BindingResult result, Model model, HttpServletRequest request, HttpServletResponse response){
LoteRemessa loteRemessa = loteRemessaFacadeProxy.pesquisaNumeroLote(loteRemessaFormBean.getNumeroLote());
loteRemessa.setDtRemessa(new Date());
loteRemessaFacadeProxy.saveOrUpdate(loteRemessa);
gerarXSL(loteRemessa.getIdLoteRemessa(), response);
carregaFormLotePosPersistencia(loteRemessaFormBean, request, loteRemessa);
model.addAttribute("loteRemessaFormBean", loteRemessaFormBean);
return "logged/loteRemessa";
}
public void gerarXSL(Integer idLoteRemessa, HttpServletResponse response) {
try {
JRXlsExporter exporterXLS = new JRXlsExporter();
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(getJasper());
JasperPrint print = JasperFillManager.fillReport(jasperReport, null, getDataSource(idLoteRemessa));
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, print);
exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, byteArrayOutputStream);
exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
exporterXLS.exportReport();
response.reset();
response.setContentType( "application/vnd.ms-excel" );
response.setContentLength( byteArrayOutputStream.toByteArray().length );
response.getOutputStream().write(byteArrayOutputStream.toByteArray());
response.getOutputStream().flush();
} catch (JRException e) {
logger.error(e);
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public InputStream getJasper() throws IOException {
return new ClassPathResource("jasper" + fileSeparator + "lote-remessa-excel"+".jasper").getInputStream();
}
public JRBeanCollectionDataSource getDataSource(Integer idLote) throws SQLException {
return new JRBeanCollectionDataSource(getLista(idLote));
}
private List<Servidor> getLista(Integer idLote){
List<Servidor> lista = new ArrayList<Servidor>();
for(Servidor serv : servidorFacadeProxy.getListaServidorLoteExcel(idLote)){
lista.add(serv);
}
return lista;
}
}
Alguém poderia me ajudar para ver onde eu estou errando?
Obrigado!!!
