JasperReport não faz leitura dos dados

12 respostas Resolvido
ireportjava
M

Fiz uma rotina de que irá gerar relatório, consegui finalizar todo layout mas na visualização com os dados do meu objeto tenho seguinte erro “Error retrieving field value from bean: itens.descricao.”
Eu já verifiquei se nome dos campos estão correto e está tudo OK, poderiam me orientar por favor?

Abaixo segue meu código Java e anexado meu report.GuiaANS.jrxml (60,8 KB)

public class GuiaAnsBusiness {
	private String path;

	private String pathToReportPackage;

	public GuiaAnsBusiness() {
		this.path = this.getClass().getClassLoader().getResource("GuiaANS.jrxml").getPath();
		this.pathToReportPackage = this.path;
		System.out.println(path);
	}

	public void imprimir(List<GuiaAns> lista) throws Exception {
		JasperReport report = JasperCompileManager.compileReport(this.getPathToReportPackage());
		JasperPrint print = JasperFillManager.fillReport(report, null, new JRBeanCollectionDataSource(lista));
		JasperExportManager.exportReportToPdfFile(print, "D:/guia_ans.pdf");
	}

	public String getPathToReportPackage() {
		return this.pathToReportPackage;
	}

	public String getPath() {
		return this.path;
	}

	public static void main(String[] args) {
		try {
			GuiaAns ans = new GuiaAns();
			ItensAns item = new ItensAns();

			List<ItensAns> itens = new ArrayList<>();
			List<GuiaAns> master = new ArrayList<GuiaAns>();

			ans.setRegistroAns(Long.toString(new Date().getTime()));
			ans.setNumeroGuia("123456789012");
			ans.setNumeroCarteira("3253587687618762");
			ans.setNomeBeneficiario("Matheus Eduardo");
			ans.setCodigoOperadora("[CPF removido]");
			ans.setNomeContratado("Dr. Pedro Augusto");
			ans.setConselhoProfissional("PRFDS");
			ans.setNumeroConselho("112233445566778");
			ans.setUfConselho("PR");
			ans.setAtendimentoRN("S");
			ans.setCodigoCBO("123456");
			ans.setCaraterAtendimento("8");
			item.setCodigo(1);
			item.setDescricao("Consulta Padrão");
			itens.add(item);
			ans.setItens(itens);
			master.add(ans);

			GuiaAnsBusiness relatorio = new GuiaAnsBusiness();
			relatorio.imprimir(master);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

	}
}

12 Respostas

D

A única mensagem de erro é esta

Geralmente ela vem acompanhada de mais linhas de explicação, normalmente começadas em At…

M

Olá Darlan, blz?

Único retorno são esses que está abaixo:

net.sf.jasperreports.engine.JRException: Error retrieving field value from bean: itens.descricao.
[itens.descricao]
java.lang.NoSuchMethodException: Unknown property 'descricao' on class 'class java.util.ArrayList'
java.lang.NoSuchMethodException: Unknown property 'descricao' on class 'class java.util.ArrayList'
Unknown property 'descricao' on class 'class java.util.ArrayList'

org.eclipse.debug.core.DebugException: com.sun.jdi.ClassNotLoadedException: Type has not been loaded occurred while retrieving component type of array.
data.bean.field.value.not.retrieved
org.eclipse.debug.core.DebugException: com.sun.jdi.ClassNotLoadedException: Type has not been loaded occurred while retrieving component type of array.
D

Cara, o problema é que você está enviando uma lista chamada itens (que provavelmente seja a coleção de objetos de Item) e está tentando referenciar um atributo chamado descricao que não existe na interface java.util.List e nem na implementação, a classe concreta, java.util.ArrayList.
Mostra como está o código que você cria o relatório.

M

Coloquei apenas uma parte porque é grande e não esta aceitando código inteiro.

<field name="registroAns" class="java.lang.String"/>
	<field name="itens.descricao" class="java.util.ArrayList"/>
	<background>
		<band splitType="Stretch"/>
	</background>
	<detail>
		<band height="64">
			<staticText>
				<reportElement positionType="FixRelativeToBottom" stretchType="RelativeToBandHeight" x="4" y="13" width="25" height="11" uuid="b12034c2-e87d-4b73-aa7e-8f5491657257"/>
				<textElement>
					<font size="8"/>
				</textElement>
				<text><![CDATA[2 - ]]></text>
			</staticText>
			<staticText>
				<reportElement positionType="FixRelativeToBottom" stretchType="RelativeToBandHeight" x="4" y="26" width="25" height="11" uuid="fd54f66e-a985-4891-a854-593f31ee5a9f"/>
				<textElement>
					<font size="8"/>
				</textElement>
				<text><![CDATA[3 - ]]></text>
			</staticText>
			<staticText>
				<reportElement positionType="FixRelativeToBottom" stretchType="RelativeToBandHeight" x="4" y="52" width="25" height="11" uuid="aa8133a7-5fb2-43b8-bcae-864662c8eea7"/>
				<textElement>
					<font size="8"/>
				</textElement>
				<text><![CDATA[5 - ]]></text>
			</staticText>
			<staticText>
				<reportElement positionType="FixRelativeToBottom" stretchType="RelativeToBandHeight" x="4" y="39" width="25" height="11" uuid="651381ba-5e2f-415d-a379-cded0de1da5b"/>
				<textElement>
					<font size="8"/>
				</textElement>
				<text><![CDATA[4 - ]]></text>
			</staticText>
			<textField>
				<reportElement mode="Opaque" x="229" y="0" width="388" height="13" backcolor="#EB4542" uuid="8aae24b6-fde1-47c0-8e2b-ea13459b9d70">
					<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="a04944fb-9ed2-47cb-8239-d5660dd8d859"/>
				</reportElement>
				<textFieldExpression><![CDATA[$F{itens.descricao}]]></textFieldExpression>
			</textField>
			<staticText>
				<reportElement positionType="FixRelativeToBottom" stretchType="RelativeToBandHeight" x="4" y="0" width="25" height="11" uuid="320d4ca9-0eb2-460c-845e-ea264b12cb57"/>
				<textElement>
					<font size="8"/>
				</textElement>
				<text><![CDATA[1 - ]]></text>
			</staticText>
		</band>
	</detail>
D

E o código java?

M

Oi Darlan blz?

Não entendi o codigo java que eu tenho é apenas o que esta na primeira publicação.
Seria isso?

D

Não, seria o código referente a classe GuiaAns

M
public class GuiaAns {
	private String registroAns;
	private String numeroGuia;
	private String numeroCarteira;
	private String nomeBeneficiario;
	private String codigoOperadora;
	private String nomeContratado;
	private String conselhoProfissional;
	private String numeroConselho;
	private String ufConselho;
	private String atendimentoRN;
	private String codigoCBO;
	private String caraterAtendimento;
    private List<ItensAns> itens;
	
	
	//Get/set ....
}

public class ItensAns {
    private int codigo;
    private String descricao;
     //....    
}

Acabei esquecendo de publicar as classes!

S

Isso aqui está errado, pois a classe ArrayList não possui um atributo chamado descricao.

Posta o código do XML a partir da linha onde você itera os itens.

D
Solucao aceita

Agora entende o que eu estava falando? Você nunca vai conseguir acessar a propriedade descricao do objeto itens pelo simples fato de que ele é um java.util.List e esta interfce não possui tal método.
Você vai precisar criar um sub relatório ou algo assim para colocar as informações destes itens no teu relatório.

M

Entendi ± eu estava lendo sobre o sub-report faz sentido isso achei que dava para resolver tudo apenas um report assim que chegar em casa irei testar essa ideia e publico aqui se deu certo.

Tks cara!!!

M

E ai cara beleza?

Então XML do report está anexado ao tópico e data-source eu faço em tempo de execução conforme código acima.
Como mencionado abaixo como é um “master details” acredito que será necessário um sub-report.

Abs

Criado 14 de março de 2018
Ultima resposta 15 de mar. de 2018
Respostas 12
Participantes 3