Relatorio + ArrayList + TableModel

3 respostas
J

Boa tarde!
Tenho algumas duvidas com relação ao IReport/Jasper
Estou desenvolvendo as partes derelatorios da aplicação
Estou utilizando Hibernate +JPA (Annotations) + Postgre
Vamos la:
Fiz um table model personalizado para cada tabela do meu Banco de Dados…
Portanto faço a filtragem pelo TableModel, com consultas via HQL,
quero pegar a ArrayList que esta atualmente e joga-lo no Jasper…
to batalhando a 1 semana,
e nada da certo…
e a maioria sao objetos compostos, ou seja, Classe pessoa tem uma classe Endereco…
Pelo JRBean nao estou conseguindo jogar os dados,
Alguem tem um tutorial ou sabe como resolver este Problema

3 Respostas

A

qual o erro? cola aqui.

Marky.Vasconcelos

Normalmente o TableModel não deve ser responsavel por filtrar seus dados, e sim exibir o que contem na sua lista. Desse modo, voce pegar os itens atuais vai ser simplesmente um “model.getData()

J

Olá Marky,
então, como nao tenho os DAOs personalizados,apenas um generico,resolvi implementar as consultas via HQL dentro do table model e este
ja tem um metodo que retorna todos os itens presentes na Table Model, mas nao sei como implementar esse tipo de relatório dentro do Ireport:
eis a minha classe que utilizo:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sga.hibernate.mapeamento;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author Juan Perondi
 */
@Entity
@GenericGenerator(name="generator", strategy="increment", parameters = { })
@Table(name = "fita_video")
@NamedQueries({
    @NamedQuery(name = "FitaVideo.findAll", query = "SELECT f FROM FitaVideo f"),
    @NamedQuery(name = "FitaVideo.findByCodMidia", query = "SELECT f FROM FitaVideo f WHERE f.codMidia = :codMidia"),
    @NamedQuery(name = "FitaVideo.findByTitulo", query = "SELECT f FROM FitaVideo f WHERE f.titulo = :titulo"),
    @NamedQuery(name = "FitaVideo.findByDataGravacao", query = "SELECT f FROM FitaVideo f WHERE f.dataGravacao = :dataGravacao"),
    @NamedQuery(name = "FitaVideo.findByPreco", query = "SELECT f FROM FitaVideo f WHERE f.preco = :preco"),
    @NamedQuery(name = "FitaVideo.findByDuracao", query = "SELECT f FROM FitaVideo f WHERE f.duracao = :duracao"),
    @NamedQuery(name = "FitaVideo.findByConteudo", query = "SELECT f FROM FitaVideo f WHERE f.conteudo = :conteudo")})
public class FitaVideo implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO, generator="generator")
    @Basic(optional = false)
    @Column(name = "cod_midia")
    private Integer codMidia;
    @Column(name = "titulo")
    private String titulo;
    @Column(name = "data_gravacao")
    @Temporal(TemporalType.DATE)
    private Date dataGravacao;
    @Column(name = "preco")
    private String preco;
    @Column(name = "duracao")
    private String duracao;
    @Column(name = "conteudo")
    private String conteudo;
    @JoinColumn(name = "cod_modogravacao", referencedColumnName = "cod_modogravacao")
    @ManyToOne(optional = false)
    private ModoGravacao modoGravacao;
    @JoinColumn(name = "cod_modoaquisicao", referencedColumnName = "cod_modoaquisicao")
    @ManyToOne(optional = false)
    private ModoAquisicao modoAquisicao;
    @JoinColumn(name = "cod_idioma", referencedColumnName = "cod_idioma")
    @ManyToOne(optional = false)
    private Idioma idioma;
    @JoinColumn(name = "cod_distribuidora", referencedColumnName = "cod_distribuidora")
    @ManyToOne(optional = false)
    private Distribuidora distribuidora;
    @JoinColumn(name = "cod_classificmidia", referencedColumnName = "cod_classificmidia")
    @ManyToOne(optional = false)
    private ClassificMidia classificMidia;

    public FitaVideo() {
    }

    public FitaVideo(Integer codMidia) {
        this.codMidia = codMidia;
    }

    public Integer getCodMidia() {
        return codMidia;
    }

    public void setCodMidia(Integer codMidia) {
        this.codMidia = codMidia;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public Date getDataGravacao() {
        return dataGravacao;
    }

    public void setDataGravacao(Date dataGravacao) {
        this.dataGravacao = dataGravacao;
    }

    public String getPreco() {
        return preco;
    }

    public void setPreco(String preco) {
        this.preco = preco;
    }

    public String getDuracao() {
        return duracao;
    }

    public void setDuracao(String duracao) {
        this.duracao = duracao;
    }

    public String getConteudo() {
        return conteudo;
    }

    public void setConteudo(String conteudo) {
        this.conteudo = conteudo;
    }

    public ModoGravacao getModoGravacao() {
        return modoGravacao;
    }

    public void setModoGravacao(ModoGravacao modoGravacao) {
        this.modoGravacao = modoGravacao;
    }

    public ModoAquisicao getModoAquisicao() {
        return modoAquisicao;
    }

    public void setModoAquisicao(ModoAquisicao modoAquisicao) {
        this.modoAquisicao = modoAquisicao;
    }

    public Idioma getIdioma() {
        return idioma;
    }

    public void setIdioma(Idioma idioma) {
        this.idioma = idioma;
    }

    public Distribuidora getDistribuidora() {
        return distribuidora;
    }

    public void setDistribuidora(Distribuidora distribuidora) {
        this.distribuidora = distribuidora;
    }

    public ClassificMidia getClassificMidia() {
        return classificMidia;
    }

    public void setClassificMidia(ClassificMidia classificMidia) {
        this.classificMidia = classificMidia;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (codMidia != null ? codMidia.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof FitaVideo)) {
            return false;
        }
        FitaVideo other = (FitaVideo) object;
        if ((this.codMidia == null && other.codMidia != null) || (this.codMidia != null && !this.codMidia.equals(other.codMidia))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return this.titulo;
    }

}

eis meu XML:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report name" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
	<background>
		<band/>
	</background>
	<title>
		<band height="85">
			<staticText>
				<reportElement x="0" y="1" width="802" height="77"/>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font size="30"/>
				</textElement>
				<text><![CDATA[Mídias]]></text>
			</staticText>
			<line>
				<reportElement x="0" y="0" width="802" height="1"/>
			</line>
			<line>
				<reportElement x="0" y="78" width="802" height="1"/>
			</line>
		</band>
	</title>
	<pageHeader>
		<band/>
	</pageHeader>
	<columnHeader>
		<band height="18">
			<staticText>
				<reportElement mode="Opaque" x="55" y="0" width="161" height="16" backcolor="#CCCCFF"/>
				<box>
					<topPen lineWidth="0.5"/>
					<leftPen lineWidth="0.5"/>
					<bottomPen lineWidth="0.5"/>
					<rightPen lineWidth="0.5"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Times New Roman" size="10"/>
				</textElement>
				<text><![CDATA[Título]]></text>
			</staticText>
			<staticText>
				<reportElement mode="Opaque" x="216" y="0" width="161" height="16" backcolor="#CCCCFF"/>
				<box>
					<topPen lineWidth="0.5"/>
					<leftPen lineWidth="0.5"/>
					<bottomPen lineWidth="0.5"/>
					<rightPen lineWidth="0.5"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Times New Roman" size="10"/>
				</textElement>
				<text><![CDATA[Conteúdo]]></text>
			</staticText>
			<staticText>
				<reportElement mode="Opaque" x="377" y="0" width="40" height="16" backcolor="#CCCCFF"/>
				<box>
					<topPen lineWidth="0.5"/>
					<leftPen lineWidth="0.5"/>
					<bottomPen lineWidth="0.5"/>
					<rightPen lineWidth="0.5"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Times New Roman" size="10"/>
				</textElement>
				<text><![CDATA[Data]]></text>
			</staticText>
			<staticText>
				<reportElement mode="Opaque" x="455" y="0" width="39" height="16" backcolor="#CCCCFF"/>
				<box>
					<topPen lineWidth="0.5"/>
					<leftPen lineWidth="0.5"/>
					<bottomPen lineWidth="0.5"/>
					<rightPen lineWidth="0.5"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Times New Roman" size="10"/>
				</textElement>
				<text><![CDATA[Duração]]></text>
			</staticText>
			<staticText>
				<reportElement mode="Opaque" x="723" y="0" width="79" height="16" backcolor="#CCCCFF"/>
				<box>
					<topPen lineWidth="0.5"/>
					<leftPen lineWidth="0.5"/>
					<bottomPen lineWidth="0.5"/>
					<rightPen lineWidth="0.5"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Times New Roman" size="10"/>
				</textElement>
				<text><![CDATA[Classificação]]></text>
			</staticText>
			<staticText>
				<reportElement mode="Opaque" x="670" y="0" width="53" height="16" backcolor="#CCCCFF"/>
				<box>
					<topPen lineWidth="0.5"/>
					<leftPen lineWidth="0.5"/>
					<bottomPen lineWidth="0.5"/>
					<rightPen lineWidth="0.5"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Times New Roman" size="10"/>
				</textElement>
				<text><![CDATA[Idioma]]></text>
			</staticText>
			<staticText>
				<reportElement mode="Opaque" x="610" y="0" width="60" height="16" backcolor="#CCCCFF"/>
				<box>
					<topPen lineWidth="0.5"/>
					<leftPen lineWidth="0.5"/>
					<bottomPen lineWidth="0.5"/>
					<rightPen lineWidth="0.5"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Times New Roman" size="10"/>
				</textElement>
				<text><![CDATA[Gravação]]></text>
			</staticText>
			<staticText>
				<reportElement mode="Opaque" x="562" y="0" width="48" height="16" backcolor="#CCCCFF"/>
				<box>
					<topPen lineWidth="0.5"/>
					<leftPen lineWidth="0.5"/>
					<bottomPen lineWidth="0.5"/>
					<rightPen lineWidth="0.5"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Times New Roman" size="10"/>
				</textElement>
				<text><![CDATA[Aquisição]]></text>
			</staticText>
			<staticText>
				<reportElement mode="Opaque" x="494" y="0" width="68" height="16" backcolor="#CCCCFF"/>
				<box>
					<topPen lineWidth="0.5"/>
					<leftPen lineWidth="0.5"/>
					<bottomPen lineWidth="0.5"/>
					<rightPen lineWidth="0.5"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Times New Roman" size="10"/>
				</textElement>
				<text><![CDATA[Distribuidora]]></text>
			</staticText>
			<staticText>
				<reportElement mode="Opaque" x="0" y="0" width="55" height="16" backcolor="#CCCCFF"/>
				<box>
					<topPen lineWidth="0.5"/>
					<leftPen lineWidth="0.5"/>
					<bottomPen lineWidth="0.5"/>
					<rightPen lineWidth="0.5"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Times New Roman" size="10"/>
				</textElement>
				<text><![CDATA[Código]]></text>
			</staticText>
			<staticText>
				<reportElement mode="Opaque" x="417" y="0" width="38" height="16" backcolor="#CCCCFF"/>
				<box>
					<topPen lineWidth="0.5"/>
					<leftPen lineWidth="0.5"/>
					<bottomPen lineWidth="0.5"/>
					<rightPen lineWidth="0.5"/>
				</box>
				<textElement textAlignment="Center" verticalAlignment="Middle">
					<font fontName="Times New Roman" size="10"/>
				</textElement>
				<text><![CDATA[Preço]]></text>
			</staticText>
		</band>
	</columnHeader>
	<detail>
		<band height="20">
			<textField>
				<reportElement x="0" y="0" width="55" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.Integer"><![CDATA[$F{codMidia}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="55" y="-20" width="161" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[$F{field}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="55" y="0" width="161" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[$F{titulo}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="417" y="-1" width="38" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[$F{preco}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="456" y="0" width="38" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[$F{duracao}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="494" y="0" width="68" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[$F{distribuidora}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="562" y="0" width="48" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[$F{modoAquisicao}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="610" y="0" width="60" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[$F{modoGravacao}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="670" y="0" width="53" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[$F{idioma}]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="723" y="0" width="79" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[$F{classificMidia}]]></textFieldExpression>
			</textField>
		</band>
	</detail>
	<columnFooter>
		<band/>
	</columnFooter>
	<pageFooter>
		<band height="25">
			<textField>
				<reportElement x="216" y="-20" width="161" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[$F{conteudo}]]></textFieldExpression>
			</textField>
			<textField pattern="dd/MM/yyyy">
				<reportElement x="377" y="-20" width="40" height="20"/>
				<textElement/>
				<textFieldExpression class="java.util.Date"><![CDATA[$F{dataGravacao}]]></textFieldExpression>
			</textField>
			<textField pattern="dd/MM/yyyy HH.mm.ss">
				<reportElement x="0" y="0" width="100" height="20"/>
				<textElement/>
				<textFieldExpression class="java.util.Date"><![CDATA[new java.util.Date()]]></textFieldExpression>
			</textField>
			<textField>
				<reportElement x="562" y="0" width="199" height="20"/>
				<textElement textAlignment="Right"/>
				<textFieldExpression class="java.lang.String"><![CDATA["Pagina "+$V{PAGE_NUMBER}+" de"]]></textFieldExpression>
			</textField>
			<textField evaluationTime="Report">
				<reportElement x="761" y="0" width="40" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
			</textField>
		</band>
	</pageFooter>
	<summary>
		<band/>
	</summary>
</jasperReport>

Onde chamo o relatorio com a Arraylist ja preenchida:

JasperReport jasperReport;
        JasperPrint jasperPrint;
        JasperViewer jasperViewer;
        ArrayList<FitaVideo> list = (ArrayList<FitaVideo>) ((TableModelMidias) this.tabela.getModel()).getAllMidias();
    JRBeanCollectionDataSource jrds = new JRBeanCollectionDataSource(list);
        try {
            jasperReport = JasperCompileManager.compileReport(Thread.currentThread().getContextClassLoader().getResourceAsStream("sga/Relatórios/Filter/Midia_Report.jrxml"));
            jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), jrds);
            jasperViewer = new JasperViewer(jasperPrint, false);
            jasperViewer.setDefaultCloseOperation(JasperViewer.DISPOSE_ON_CLOSE);
        } catch (JRException ex) {
            Logger.getLogger(Report_Mídia_Viewer.class.getName()).log(Level.SEVERE, null, ex);
        }

eis o erro:

22/03/2011 15:09:42 sga.Relatórios.Filter.Report_Mídia_Viewer buttonVisualizarPDFActionPerformed
SEVERE: null
net.sf.jasperreports.engine.design.JRValidationException: Report design not valid : 
         1. Field not found : getCodMidia()
         2. Field not found : field
         3. Field not found : titulo
         4. Field not found : preco
         5. Field not found : duracao
         6. Field not found : distribuidora
         7. Field not found : modoAquisicao
         8. Field not found : modoGravacao
         9. Field not found : idioma
         10. Field not found : classificMidia
         11. Field not found : conteudo
         12. Field not found : dataGravacao
        at net.sf.jasperreports.engine.design.JRAbstractCompiler.verifyDesign(JRAbstractCompiler.java:262)
        at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:144)
        at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:219)
        at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:205)
        at sga.Relatórios.Filter.Report_Mídia_Viewer.buttonVisualizarPDFActionPerformed(Report_Mídia_Viewer.java:337)
        at sga.Relatórios.Filter.Report_Mídia_Viewer.access$700(Report_Mídia_Viewer.java:35)
        at sga.Relatórios.Filter.Report_Mídia_Viewer$8.actionPerformed(Report_Mídia_Viewer.java:220)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6263)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2475)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
        at java.awt.Dialog$1.run(Dialog.java:1045)
        at java.awt.Dialog$3.run(Dialog.java:1097)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.Dialog.show(Dialog.java:1095)
        at java.awt.Component.show(Component.java:1563)
        at java.awt.Component.setVisible(Component.java:1515)
        at java.awt.Window.setVisible(Window.java:841)
        at java.awt.Dialog.setVisible(Dialog.java:985)
        at sga.Relatórios.Filter.Report_Mídia_Viewer$9.run(Report_Mídia_Viewer.java:361)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

é a primeira vez que trabvalho com IREPORT e Jasper…
alguem poderia meajudar?

Criado 21 de março de 2011
Ultima resposta 22 de mar. de 2011
Respostas 3
Participantes 3