Gerar excel pelo ireport

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!!!

Resolvi o erro fazendo o seguinte:

Passei false no isUseFieldDescription quando criei o bean data source, ex.new JRBeanCollectionDataSource(getLista(idLote), false).

Só que agora, o excel esta aparecendo assim no sistema:


Consegui gerar o excel, gravando direto no disco.

Estava precisando fazer com que abrisse aquela janela que pergunta se vc quer abrir o arquivo ou fazer o download. Configurei o contentType para “application/vnd.ms-excel” e nada, alguém consegue visualizar porque não abre a janela?

Obrigado.

[code] public void gerarXSL(Integer idLoteRemessa, HttpServletResponse response) {
try {

		JasperReport jasperReport = (JasperReport) JRLoader.loadObject(getJasper());
		
		JasperPrint print = JasperFillManager.fillReport(jasperReport, null, getDataSource(idLoteRemessa));

    	ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    	OutputStream outputfile= new FileOutputStream(new File("c://"+jasperReport.getName()+".xls")); 

    	JRExporter exporterXLS = new JRXlsExporter();	    	
    	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.setParameter(JRXlsExporterParameter.CHARACTER_ENCODING, "UTF-8");	    	
    	exporterXLS.exportReport(); 
    	
    	response.reset();   
    	response.setContentType("application/vnd.ms-excel");
		response.setHeader("Content-Disposition","attachment; filename="+jasperReport.getName()+".xls");
    	response.setContentLength( byteArrayOutputStream.toByteArray().length );		
		response.addHeader("Pragma", "no-cache");
		response.addHeader("Cache-Control", "no-cache");
		response.setDateHeader("Expires", -1);
		
		outputfile.write(byteArrayOutputStream.toByteArray());
		byteArrayOutputStream.flush(); 
		byteArrayOutputStream.close();
		
	} catch (JRException e) {
		logger.error(e);
		e.printStackTrace();
	} catch (IOException e) {			
		e.printStackTrace();
	} catch (SQLException e) {			
		e.printStackTrace();
	}

}[/code]