Olá, pessoal, boa tarde! Quando gero o relatório de uma entidade sem relacionamento funciona. Entidade com mas de um relacionamento da erro de mapeamento. Estou com um problema, onde, não estou conseguindo gerar relatório em PDF. No eclipse o relatório Ireport é gerado corretamente sem da erro, mas quando chamo com a aplicação em funcionamento da erro. Estou pesquisando à 5 dias e não consigo resolver. Peço ajuda de vocês!!! Vou colocar todo fluxo da aplicação para ajudar no monitoramento do erro. Desde já obrigado!
Erro no console:
ADVERTÊNCIA: /pages/pessoa.xhtml @32,89 actionListener="#{pessoaBean.exportarPDF}":
net.sf.jasperreports.engine.JRException: Error retrieving field value from bean: cidade_codigo.
Caused by: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean: cidade_codigo.Caused by: java.lang.NoSuchMethodException: Unknown property ‘cidade_codigo’ on class ‘class br.pro.sispro.migreja.domain.Pessoa’
Chamo o método, para exportar para PDF:
actionListener="#{pessoaBean.exportarPDF}"
Exportar para PDF:
public void exportarPDF(ActionEvent actionEvent) throws JRException, IOException{
PessoaDAO pessoaDAO = new PessoaDAO();
pessoas = pessoaDAO.listar();
DataTable tabela = (DataTable) Faces.getViewRoot().findComponent("formListagem:tabela");
Map<String, Object> filtros = tabela.getFilters();
String nome = (String) filtros.get("nome");
String cpf = (String) filtros.get("cpf");
File jasper = new File(FacesContext.getCurrentInstance().getExternalContext().getRealPath("/reports/pessoa.jasper"));
Map<String, Object> parametros = new HashMap<>();
parametros.put("nome", "%"+nome+"%");
parametros.put("cpf", "%"+cpf+"%");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasper.getPath(), parametros, new JRBeanCollectionDataSource(this.pessoas));
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
response.addHeader("Content-disposition","attachment; filename=jsfReporte.pdf");
ServletOutputStream stream = response.getOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, stream);
stream.flush();
stream.close();
FacesContext.getCurrentInstance().responseComplete();
}
Chave estrangeira no Domain:
Chave estrangeira composição. Relacionamento (1:N), uma cidade pode ter muitas
pessoas e uma pessoa pode pertencer a uma cidade.
@ManyToOne
@JoinColumn(name="cidade_codigo",nullable = false)//obrigatorio
private Cidade cidade;
public Cidade getCidade() {
return cidade;
}
public void setCidade(Cidade cidade) {
this.cidade = cidade;
}
Relatório Pessoa: jrxml:
<queryString>
<![CDATA[SELECT pessoa.bairro,
pessoa.celular,
pessoa.cep,
pessoa.complemento,
pessoa.cpf,
pessoa.email,
pessoa.id,
pessoa.nome,
pessoa.numero,
pessoa.rua,
pessoa.telefone,
cidade_codigo
FROM pessoa]]>
</queryString>
/*Editei o trcho abaixo para efeito de vizualização aqui no forum*/
field name="bairro" class="java.lang.String"/>
field name="celular" class="java.lang.String"/>
field name="cep" class="java.lang.String"/>
field name="complemento" class="java.lang.String"/>
field name="cpf" class="java.lang.String"/>
field name="email" class="java.lang.String"/>
field name="id" class="java.lang.String"/>
field name="nome" class="java.lang.String"/>
field name="numero" class="java.lang.String"/>
field name="rua" class="java.lang.String"/>
field name="telefone" class="java.lang.String"/>
field name="cidade_codigo" class="java.lang.Long"/>
textField isStretchWithOverflow="true">
reportElement style="Detail" positionType="Float" x="706" y="0" width="90" height="18" uuid="d851a3b9-414f-4d04-bbc3-9b61bce98031"/>
textElement>
font fontName="Serif" size="11"/>
/textElement>
<textFieldExpression><![CDATA[$F{cidade_codigo}]]></textFieldExpression>
/textField>
