Bom dia a todos, estou com um problema na geração de meus relatorios no Seam.
Implementei a classe ReporterAction e fiz a Classe RelatorioRequerimentoLicenca mas quando clico no link para gerar o relatório ele reclama que não exite os atributos da entidade no relatório…
as duas classes implementadas
@Name("relatorioRequerimentoLicenca")
public class RelatorioRequerimentoLicenca extends ReporterAction{
@In(create = true)
RequerimentoList requerimentoList;
@Override
protected String getReportPath() {
return "/WEB-INF/reports/RequerimentoLicenca.jasper";
}
protected Collection getCollection() {
return requerimentoList.getResultList();
}
@Override
protected Map<String, Object> getParams() {
Map<String, Object> params = new HashMap<String, Object>();
params.put("",null);
return params;
}
}
public abstract class ReporterAction {
@In
FacesMessages facesMessages;
@In
EntityManager entityManager;
@In(value = "org.jboss.seam.pdf.documentStore", create = true)
DocumentStore documentStore;
public static String formato;
protected abstract String getReportPath();
protected abstract Map<String, Object> getParams();
protected abstract Collection getCollection();
//Arquivos em PDF
@SuppressWarnings("deprecation")
public String print() throws JRException {
String reportUrl = getReportPath();
try {
Map<String, Object> params = new HashMap<String, Object>();
// o entity manager deve ser informado para o Jasper
params.put(JRJpaQueryExecuterFactory.PARAMETER_JPA_ENTITY_MANAGER, entityManager);
// obter os parametros especificos do relatório
params.putAll(getParams());
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(getCollection());
// obter o caminho real (file system) para o relatario
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
String reportUrlReal = request.getRealPath(reportUrl);
// imprimir o relatorio para um stream em PDF
JasperPrint impresao = JasperFillManager.fillReport(reportUrlReal,params,ds);
ByteArrayOutputStream output = new ByteArrayOutputStream();
JasperExportManager.exportReportToPdfStream(impresao, output);
// armazenar o relatorio do DocumentStore do SEAM
String reportId = documentStore.newId();
DocumentType pdf = new DocumentType("pdf", "application/pdf");
DocumentData data = new DocumentData("Report #" + reportId , pdf, output.toByteArray());
documentStore.saveData(reportId, data);
// retornar para o caminho padrao do SEAM para exibicao de relatorios
return "/seam-doc?docId=" + reportId;
}catch (Exception e) {
facesMessages.addFromResourceBundle("Erro no relatorio PDF: " + e.getMessage());
return null;
}
}
//Arquivos HTML
public String printHtml() throws JRException {
String reportUrl = getReportPath();
String reportId="";
try {
Map<String, Object> params = new HashMap<String, Object>();
// o entity manager deve ser informado para o Jasper
params.put(JRJpaQueryExecuterFactory.PARAMETER_JPA_ENTITY_MANAGER, entityManager);
// obter os parâmetros específicos do relatório
params.putAll(getParams());
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(getCollection());
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
String reportUrlReal = request.getRealPath(reportUrl);
JasperPrint impresao = JasperFillManager.fillReport(reportUrlReal,params,ds);
ByteArrayOutputStream output = new ByteArrayOutputStream();
JRHtmlExporter exporter = new JRHtmlExporter();
exporter.setParameter(JRHtmlExporterParameter.JASPER_PRINT,impresao);
exporter.setParameter(JRHtmlExporterParameter.OUTPUT_STREAM,output);
request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,impresao);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, new HashMap<Object, Object>());
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,request.getContextPath() + "/image?image=");
exporter.exportReport();
reportId = documentStore.newId();
DocumentData data = new DocumentData("Report #" + reportId , new DocumentType("html","document/html"), output.toByteArray());
documentStore.saveData(reportId, data);
return "/seam-doc?docId=" + reportId;
}catch (Exception e) {
facesMessages.addFromResourceBundle("ERRO_RELATORIO:"+ e.getMessage(),
new Object[] {reportUrl, e.getMessage()});
return null;
}
}
//Arquivos RTF
public String printRtf() throws JRException {
String reportUrl = getReportPath();
String reportId="";
try {
Map<String, Object> params = new HashMap<String, Object>();
// o entity manager deve ser informado para o Jasper
params.put(JRJpaQueryExecuterFactory.PARAMETER_JPA_ENTITY_MANAGER, entityManager);
// obter os parâmetros específicos do relatório
params.putAll(getParams());
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(getCollection());
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
String reportUrlReal = request.getRealPath(reportUrl);
JasperPrint impresao = JasperFillManager.fillReport(reportUrlReal,params,ds);
ByteArrayOutputStream output = new ByteArrayOutputStream();
JRRtfExporter exporter = new JRRtfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,impresao);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,output);
exporter.exportReport();
reportId = documentStore.newId();
DocumentData data = new DocumentData("Report #" + reportId , new DocumentType("rtf","application/rtf"), output.toByteArray());
documentStore.saveData(reportId, data);
return "/seam-doc?docId=" + reportId;
}catch (Exception e) {
facesMessages.addFromResourceBundle("ERRO_RELATORIO:"+ e.getMessage(),
new Object[] {reportUrl, e.getMessage()});
return null;
}
}
//Arquivos em XLS
public String printXls() throws JRException {
String reportUrl = getReportPath();
String reportId="";
try {
Map<String, Object> params = new HashMap<String, Object>();
// o entity manager deve ser informado para o Jasper
params.put(JRJpaQueryExecuterFactory.PARAMETER_JPA_ENTITY_MANAGER, entityManager);
// obter os parâmetros específicos do relatório
params.putAll(getParams());
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(getCollection());
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
String reportUrlReal = request.getRealPath(reportUrl);
JasperPrint impresao = JasperFillManager.fillReport(reportUrlReal,params,ds);
ByteArrayOutputStream output = new ByteArrayOutputStream();
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT,impresao);
exporter.setParameter(JRXlsExporterParameter.OUTPUT_STREAM,output);
exporter.exportReport();
reportId = documentStore.newId();
DocumentData data = new DocumentData("Report #" + reportId , new DocumentType("xls","application/xls"), output.toByteArray());
documentStore.saveData(reportId, data);
return "/seam-doc?docId=" + reportId;
}catch (Exception e) {
facesMessages.addFromResourceBundle("ERRO_RELATORIO:"+ e.getStackTrace(),
new Object[] {reportUrl, e.getMessage()});
return null;
}
}
}
o erro no servidor
09:07:18,150 INFO [lifecycle] WARNING: FacesMessage(s) have been enqueued, but may not have been displayed. sourceId=null[severity=(INFO 0), summary=(Erro no relatorio PDF: Error retrieving field value from bean : NUMERO_PROTOCOLO), detail=(Erro no relatorio PDF: Error retrieving field value from bean : NUMERO_PROTOCOLO)]
se alguem puder me ajudar ficarei grato!