Foros del Web » Programación para mayores de 30 ;) » Java »

Subreportes jasper Reports

Estas en el tema de Subreportes jasper Reports en el foro de Java en Foros del Web. Tengo el interes de mostrar un reporte del estado de cuenta de alumnos, el cual muestra tanto los cargos como los pagos del alumno, en ...
  #1 (permalink)  
Antiguo 04/06/2011, 19:06
 
Fecha de Ingreso: septiembre-2010
Mensajes: 3
Antigüedad: 8 años, 3 meses
Puntos: 0
Subreportes jasper Reports

Tengo el interes de mostrar un reporte del estado de cuenta de alumnos, el cual muestra tanto los cargos como los pagos del alumno, en la base de datos, hay una tabla de alumnos, otra de cargos y otra de pagos, segui el tutorial de aca [URL="http://www.javatutoriales.com/2009/04/creacion-de-reportes-con-jasperrepots-y_18.html"]LINK[/URL] para crear subreportes con datasources propios, utilizo struts, jpa y hibernate en mi aplicacion web, el codigo del ejemplo me funciona al utilizar un action mapeado con struts para generar el reporte con:
Código:
        <action name="reporteEstadoDeCuenta" class="mx.dsm.interschool.finanzas.actions.EstadoDeCuentaAction" method="reporteEstadoDeCuenta">
            <result name="success" type="jasper">

                <param name="location">/WEB-INF/reportes/estadoDeCuenta/estadoDeCuenta.jasper</param>
                <param name="dataSource">listaAlumnos</param>
                <param name="format">PDF</param>
                <param name="reportParameters">reportParams</param>

            </result>
            <result name="input">/WEB-INF/jsp/operacion/reporteEstadoDeCuenta/editReporteEstadoDeCuenta.jsp</result>
        </action>
sin embargo al generarlo "manualmente mediante":
Código:
JasperPrint jasperPrint = JasperFillManager.fillReport(ServletActionContext.getServletContext().getRealPath("/WEB-INF/reportes/estadoDeCuenta/estadoDeCuenta.jasper"), reportParams,dataSource);
salta un error diciendo que "Unknown property for class: Alumno" el cual es atributo que regresa la lista de cargos/pagos, necesito hacerlo mediante el fillreport, ya que me interesa que se envie por correo electronico y no que se imprima el reporte, si alguen puede ayudarme se los agredesco, dejo algo de mi codigo:

mi clase Alumno:
Código:
public class Alumno extends mx.dsm.interschool.catalogo.ejb.entity.Persona implements Serializable {

    @Transient
    private List ListaCargos=new ArrayList();

    @Transient
    private List ListaPagos=new ArrayList();

    @Transient
    private JRBeanCollectionDataSource ListaCargosDS;

    @Transient
    private JRBeanCollectionDataSource ListaPagosDS;

        public Alumno() {
	}
	
	public boolean equals(Object aObj) {
		if (aObj == this)
			return true;
		if (!(aObj instanceof Alumno))
			return false;
		Alumno alumno = (Alumno)aObj;
		if ((getIdAlumno() != null && !getIdAlumno().equals(alumno.getIdAlumno())) || (getIdAlumno() == null && alumno.getIdAlumno() != null))
			return false;
		return true;
	}
	
	public int hashCode() {
		int hashcode = 0;
		hashcode = hashcode + (getIdAlumno() == null ? 0 : getIdAlumno().hashCode());
		return hashcode;
	}
	
	@ManyToOne(targetEntity=mx.dsm.interschool.catalogo.ejb.entity.Familia.class, fetch=FetchType.LAZY)
	@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.LOCK})	
	@JoinColumns({ @JoinColumn(name="IdFamilia", referencedColumnName="IdFamilia") })	
	@org.hibernate.annotations.LazyToOne(value=org.hibernate.annotations.LazyToOneOption.NO_PROXY)	
	private mx.dsm.interschool.catalogo.ejb.entity.Familia familia;
	
	@Column(name="IdAlumno", nullable=false, unique=true, length=25)	
	private String idAlumno;
	
	@Column(name="NumeroOficial", nullable=true, length=25)	
	private String numeroOficial;
	
	@OneToOne(mappedBy="alumno", targetEntity=mx.dsm.interschool.catalogo.ejb.entity.Prospecto.class, fetch=FetchType.LAZY)
	@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.LOCK})	
	@org.hibernate.annotations.LazyToOne(value=org.hibernate.annotations.LazyToOneOption.NO_PROXY)	
	private mx.dsm.interschool.catalogo.ejb.entity.Prospecto prospecto;
	
        @RequiredStringValidator(message = "Introduce IdAlumno", key = "i18n.key", shortCircuit = true, trim = true)
	public void setIdAlumno(String value) {
		this.idAlumno = value.toUpperCase();
	}
	
	public String getIdAlumno() {
		return idAlumno;
	}
	
	public void setNumeroOficial(String value) {
		this.numeroOficial = value.toUpperCase();
	}
	
	public String getNumeroOficial() {
		return numeroOficial;
	}
	
	public void setProspecto(mx.dsm.interschool.catalogo.ejb.entity.Prospecto value) {
		this.prospecto = value;
	}
	
	public mx.dsm.interschool.catalogo.ejb.entity.Prospecto getProspecto() {
		return prospecto;
	}
	
	public void setFamilia(mx.dsm.interschool.catalogo.ejb.entity.Familia value) {
		this.familia = value;
	}
	
	public mx.dsm.interschool.catalogo.ejb.entity.Familia getFamilia() {
		return familia;
	}
	
	public String toString() {
		return super.toString();
	}

        public List getListaCargos() {
            return ListaCargos;
        }

        public void setListaCargos(List Cargos) {
            this.ListaCargos = Cargos;
        }

        public JRBeanCollectionDataSource getListaCargosDS(){
            this.ListaCargosDS=new JRBeanCollectionDataSource(ListaCargos);
            return this.ListaCargosDS;
        }

        public List getListaPagos() {
            return ListaPagos;
        }

        public void setListaPagos(List Pagos) {
            this.ListaPagos = Pagos;
        }

        public JRDataSource getListaPagosDS(){
            ListaPagosDS=new JRBeanCollectionDataSource(ListaPagos);
            return ListaPagosDS;
        }
mi jrxml:
Código:
<?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">
	<property name="ireport.zoom" value="1.0"/>
	<property name="ireport.x" value="0"/>
	<property name="ireport.y" value="0"/>
	<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
		<defaultValueExpression><![CDATA["/home/alvaro/Documentos/NuevoInterSchool/Interschool/ISFinanzas/web/WEB-INF/reportes/estadoDeCuenta/"]]></defaultValueExpression>
	</parameter>
	<queryString>
		<![CDATA[]]>
	</queryString>
	<field name="nombreCompleto" class="java.lang.String">
		<fieldDescription><![CDATA[nombreCompleto]]></fieldDescription>
	</field>
	<field name="idPersona" class="java.lang.Long">
		<fieldDescription><![CDATA[idPersona]]></fieldDescription>
	</field>
	<field name="idAlumno" class="java.lang.String">
		<fieldDescription><![CDATA[idAlumno]]></fieldDescription>
	</field>
	<field name="ListaCargosDS" class="net.sf.jasperreports.engine.JRDataSource">
		<fieldDescription><![CDATA[ListaCargosDS]]></fieldDescription>
	</field>
	<field name="ListaPagosDS" class="net.sf.jasperreports.engine.JRDataSource">
		<fieldDescription><![CDATA[ListaPagosDS]]></fieldDescription>
	</field>
	<background>
		<band splitType="Stretch"/>
	</background>
	<title>
		<band splitType="Stretch"/>
	</title>
	<pageHeader>
		<band splitType="Stretch"/>
	</pageHeader>
	<columnHeader>
		<band splitType="Stretch"/>
	</columnHeader>
	<detail>
		<band height="372" splitType="Stretch">
			<staticText>
				<reportElement x="325" y="0" width="153" height="20"/>
				<textElement>
					<font size="15" isBold="true"/>
				</textElement>
				<text><![CDATA[Estado De Cuenta]]></text>
			</staticText>
			<textField>
				<reportElement x="0" y="21" width="325" height="20"/>
				<textElement/>
				<textFieldExpression class="java.lang.String"><![CDATA["Alumno: "+$F{nombreCompleto}]]></textFieldExpression>
			</textField>
			<subreport>
				<reportElement x="0" y="48" width="802" height="100"/>
				<dataSourceExpression><![CDATA[$F{ListaCargosDS}]]></dataSourceExpression>
				<subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "estadoDeCuentaCargos.jasper"]]></subreportExpression>
			</subreport>
			<subreport>
				<reportElement stretchType="RelativeToTallestObject" x="0" y="268" width="802" height="100"/>
				<dataSourceExpression><![CDATA[$F{ListaPagosDS}]]></dataSourceExpression>
				<subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "estadoDeCuentaPagos.jasper"]]></subreportExpression>
			</subreport>
		</band>
	</detail>
	<columnFooter>
		<band splitType="Stretch"/>
	</columnFooter>
	<pageFooter>
		<band splitType="Stretch"/>
	</pageFooter>
	<summary>
		<band height="27" splitType="Stretch"/>
	</summary>
</jasperReport>
el error que recibo es:
Código:
GRAVE: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : ListaCargosDS
Caused by: java.lang.NoSuchMethodException: Unknown property 'ListaCargosDS' on class 'class mx.dsm.interschool.catalogo.ejb.entity.Alumno'

o alguna alternativa para mprimir un reporte como el que me interesa gracias

Última edición por Phil3911; 04/06/2011 a las 21:23
  #2 (permalink)  
Antiguo 06/06/2011, 03:20
 
Fecha de Ingreso: mayo-2011
Mensajes: 79
Antigüedad: 7 años, 6 meses
Puntos: 14
Respuesta: Subreportes jasper Reports

has probado a pasarle el datasource como un parámetro en reportParams más tal y como haces desde el jsp en lugar de como un argumento adicional en el FillReport?
__________________
Web Admin:
http://www.coretec.es
Tutoriales, Noticias y Recursos Liferay y J2EE

Etiquetas: jasper, reports
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:36.