Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
8
Ms Siguienteblog
TutorialesdeProgramacionJava
BlogdedicadoatemasdeprogramacinactualesusandoellenguajedeprogramacinJavaylasltimasversionesdesusAPIsyHerramientas.
Pginaprincipal
PginadeConcursos
TutorialesUPAO2010
PresentacionesCapacitacin
LUNES,2DEMARZODE2009
DONACIONES
JAVATUTORIALESENFACEBOOK
JavaTutoriales
Megusta
JavaTutorialesha
aadidounafotonueva.
13demarzo
getFieldValue(JRFieldjrField)
next()
Explicarestosmtodosunpocomsadelante,porahoracomencemosagenerartodolonecesarioparatenernuestroreporte.
CreamosunnuevoproyectoenNetBeans(men"File>NewProject...").Enlaventanadenuevosproyectosseleccionamosla
categora "Java" y como tipo de proyecto seleccionamos "JavaApplication" y hacemos clic en el botn "Next". En la siguiente
ventanaintroducimoselnombredenuestroproyectoydejamosseleccionadalasopciones"CreateMainClass" y "SetasMain
Project".
Para que podamos pasar datos a nuestro reporte es necesario que utilicemos un datasource. En el ejemplo anterior veamos que el
datasourcequeusbamoseralabasededatosylaconexinalamisma.Enestaocasineldatasourceserunadenuestrasclases.
Esta clase deber implementar la interface "JRDataSource" y contendr la lgica para pasar los datos correspondientes a nuestro
reporte.
16MegustaSehacompartido1vez
Megusta
Comentar
A24386personaslesgustaJavaTutoriales
Creamosunanuevaclasehaciendoclicderechosobreelnodo"SourcePackages"delaventana"Projects",osobreelpaqueteque
yatenemoscreado,yenelmencontextualqueseabreseleccionamoslaopcin"New>JavaClass...".
PluginsocialdeFacebook
Enlaventanaqueseabreescribimoscomoennombredelanuevaclase"Participante"ypresionamoselbotn"Finish".Conesto
veremosenlaventanadenuestroeditorlanuevaclase"Participante".
Esta clase "Partcipante" representar los datos que se mostrarn en el reporte, tal como en el ejemplo anterior cada uno de los
registrosdelatabla"participantes"representabaunafilaenelreportefinal,cadaobjetoparticipantequecreemosrepresentaruna
filaenelnuevoreporte.
Agreguemoslossiguientesatributosanuestraclase:
http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy.html
1/26
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
privateintid;
privateStringnombre;
privateStringusername;
privateStringpassword;
privateStringcomentarios;
Ademsagregamossusgettersysussettersydosconstructores, uno sin argumentos y uno que reciba como argumentos todas
laspropiedadesdeclaradasanteriormente.
Si estn utilizando el NetBeans para seguir este tutorial pueden generar tanto los setters y los getters de forma automtica
presionandolasteclas"Alt+Insert",conlocualseabrirunmencontextualconlasopcionesnecesariasparahaceresto:
Alterminar,suclasedebeversemsomenosas:
SEGUIDORES
Participarenestesitio
GoogleFriendConnect
Miembros(195) Ms
Yaeresmiembro?Iniciarsesin
ARCHIVODELBLOG
2015(1)
2013(1)
2012(2)
2011(11)
2010(10)
2009(22)
septiembre(2)
agosto(2)
julio(1)
junio(3)
mayo(2)
abril(5)
marzo(2)
CreacindeReportesconJasperRe
yiReports...
CreacindeReportesconJasperRe
yiReports...
febrero(2)
enero(3)
http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy.html
2/26
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
publicclassParticipante
{
privateintid;
privateStringnombre;
privateStringusername;
privateStringpassword;
privateStringcomentarios;
publicParticipante()
{
}
publicParticipante(intid,Stringnombre,Stringusername,Stringpassword,Stringcomentarios)
{
this.id=id;
this.nombre=nombre;
this.username=username;
this.password=password;
this.comentarios=comentarios;
}
publicStringgetComentarios()
{
returncomentarios;
}
publicvoidsetComentarios(Stringcomentarios)
{
this.comentarios=comentarios;
}
publicintgetId()
{
returnid;
}
publicvoidsetId(intid)
{
this.id=id;
}
DATOSPERSONALES
Alex
publicStringgetNombre()
{
returnnombre;
}
publicvoidsetNombre(Stringnombre)
{
this.nombre=nombre;
}
publicStringgetPassword()
{
returnpassword;
}
publicvoidsetPassword(Stringpassword)
{
this.password=password;
}
publicStringgetUsername()
{
returnusername;
}
publicvoidsetUsername(Stringusername)
{
this.username=username;
}
}
Ahora,antesdeseguirconnuestrocdigoJava,pasaremosacrearlaplantilladenuestroreporteconiReport,porloqueabrimosesta
herramienta.
En esta ocasin no haremos uso de un wizard para crear el reporte, sino que lo haremos desde cero, y aprovechar para explicar
http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy.html
3/26
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
algunosconceptosbsicossobrelosreportesconformelosvayamosnecesitando.
Paracrearelnuevoreportevamoselmen"File>New...".Enlaventanaqueseabreseleccionamosunodelosformatos"Blank"
ypresionamoselbotn"OpenthisTemplate":
Despus introducimos el nombre del reporte, yo lo llamar "reporte2.jrxml", y la ubicacin en la que se guardar. Les recomiendo
queenestaocasinguardenelreporteeneldirectoriorazdelproyectodeNetBeansqueacabamosdecrear.Hacemosclicenelbotn
"Next" y se nos mostrar un mensaje de felicitacin por haber creado un nuevo reporte (^_^!). Cuando presionen el botn "Finish"
vernunahojadivididaen7u8diferentesporcioneshorizontalesllamadasbandas.
Cuandogeneramosnuestroreportefinalcondatos,cadaunadeestasbandassecomportadeunaformadistinta.Algunasaparecensolo
alprincipiooalfinaldelreporte,otrasaparecenconcadanuevafilaqueseleagrega,otrassoloalfinaldelosdatos,etc.
Laplantilladereportesestdivididaen10bandaspredefinidas.Unabandasiempretieneelmismoanchoquelapgina.Sinembargoel
altodealgunasdelasbandaspuedevariardurantelafasedellenadodedatos,ansiestablecimosunaltoenelmomentodeldiseo.
Lasbandasexistentesson:
Background
Title
PageHeader
ColumnHeader
Detail1
ColumnFooter
PageFooter
LastPageFooter
Summary
NoData
Explicaralgunasdeestasbandasconformelasvayamosusandoenlostutorialescorrespondientes.
Lo primero que haremos es agregar texto a nuestro reporte. En iReport existen dos tipos de texto: texto esttico y texto dinmico
(tambin llamado expresiones). El texto esttico es aquel que no cambia, mientras que las expresiones son como etiquetas que le
indicanaJasperReportsquedebereemplazarlasporalgnvaloralmomentodegenerarelreportefinal.
Existen3tiposdeexpresiones:
Campos(fields)representadoscon"$F{nombre_campo}".
Variablesrepresentadaspor"$V{nombre_variable}".
Parmetrosrepresentadospor"$P{nombre_parmetro}".
Cadaunodeestostiposdeexpresionestieneunusoparticular:
http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy.html
4/26
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
Los campos ("$F{}") le dicen al reporte dnde colocar los valores obtenidos a travs del datasource. Por ejemplo, nuestro objeto
"Partcipante"tieneunatributollamado"username".Usandounaexpresindecampoindicamosenculparteoseccindelreporte
debeaparecerelvalordeeseatributousando"$F{username}".Estoquedarmsclarounpocomsadelante.
Losparmetros("$P{}")sonvaloresqueusualmentesepasanalreportedirectamentedesdeelprogramaquecreaelJasperPrint del
reporte (en nuestra aplicacin Java). Aunque tambin existen algunos parmetros internos que podemos leer pero no modificar. Para
hacer uso de estos parmetros simplemente indicamos el nombre del parmetro en el lugar que queremos colocarlo. Pueden encontrar
losnombresysignificadosdelosparmetrosinternosenladocumentacindeJasperReports.
Las variables ("$V{}") son objetos usados para almacenar valores como los resultados de clculos. Al igual que con los parmetros,
JasperReports tiene algunas variables internas que podemos leer. Pueden encontrar los nombres y significados de las variables la
documentacindeJasperReports.
Cada uno de estos elementos tiene un nombre, un tipo (que debe corresponder con un tipo de objeto Java como String o
Integer), y una descripcin opcional. Adems deben ser registrados para poder ser usados en tiempo de diseo y que puedan ser
entendidos al momento de compilar el reporte, y por lo tanto para que nuestro reporte funcione correctamente en tiempo de ejecucin.
Estoloveremosunpocomsadelante.
Regresemosadondenosquedamos.Queremosagregaruntextoestticoanuestroreporteamododettulo.Paraestodebemosagregar
un elemento llamado "Static Text". Los elementos que podemos agregar a nuestros reportes estn en una ventana llamada
"Palette", que se encuentra en la parte derecha de iReport, bajo la categora "ReportElements". Si no pueden ver la ventana
"Palette"presionenlasteclas"Ctrl+Shift+8":
De esta ventana arrastramos el elemento "StaticText" a la banda "Title". "Title" es una banda que solo aparece en la parte
superiordelaprimerpgina.Porloquenossirveparacolocarelttulodelreportey/oelnombreylogodenuestraempresa.
Una vez que hayamos colocado el texto esttico en la banda correspondiente y mientras an est seleccionado, modificamos sus
propiedadesusandolaventanadepropiedadesdelelementoylabarradeformatodetexto.Tambinpodemosabrirotraventanaquenos
ayudeaalinearycontrolarelaltoyelanchodeloselementosyendoalmen"Window>FormattingTools".
Ahora agregamos los encabezados de las columnas en las que se mostrarn los datos que pasaremos al reporte. Agregamos estos
nombresenlabanda"ColumnHeader",lacualserepetirencadapginaantesdemostrarlosdatosdelascolumnas.
Agregaremos las columnas "Nombre", "Usuario", "Contrasea", y "Comentarios". Por lo que nuevamente arrastramos un
elemento "StaticText" para cada una de las columnas. Tambin podemos ajustar el alto de esta banda para que se ajuste al de
nuestrotexto,yaseamovindoladirectamenteeneldiseador,odesdelaventanadepropiedades:
Nuestroreporteyacasiestterminado,ahorasolonosquedaagregarloscamposenlosquesemostrarnlosdatosquepasaremosal
reporte en un momento. Para que estos campos puedan ser reemplazados por el valor real es necesario que usemos las expresiones
http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy.html
5/26
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
(textodinmico)delasquehablanteriormente.Paraestodefiniremosun"field"paracadaunodeloscamposquequeramosmostrar
(enestecasosernlosmismoscamposparalosquedefinimoslascabecerasdelascolumnas).
Losfieldsdebendefinirseantesdepoderserusados.Estadefinicinincluyeelnombredelfieldysutipo.Losfields(ascomoel
resto de las expresiones) se definen en la ventana "ReportInspector" a la izquierda del diseador del reporte. Ah existe un nodo
llamado"Fields"queesdondeseencuentranlosfieldsquehemosdefinidoyqueporlotantopodemosusar^^.
Hacemos clic derecho en el nodo "Fields" de la ventana "Report Inspector". Con esto se abre un men contextual.
Seleccionamoslaopcin"AddField"(lanicahabilitada).
Con esto se agregar un field llamado "field1" que por default es de tipo "java.lang.String". Cambiamos el nombre de este
campo por "nombre" usando la ventana de propiedades. Esto es importante porque donde pongamos este campo ser en donde se
muestreelvalordelcamponombredenuestrosobjetosParticipantes.
Hacemos lo mismo para el resto de los campos ("username", "password", "comentarios", "id"). Hay que tener cuidado cuando
agreguemos el field "id". Si recuerdan, en la definicin de la clase "Participante" la propiedad "id" est definida como "int". Sin
embargo,aJasperReportssolopodemospasarleobjetosparaserusadoscomovalores,porloquesernecesariocambiareltipode
laclase("FieldClassenlaventanadepropiedades)a"java.lang.Integer"(aunqueenrealidadnomostraremosel"id" en este
ejemplo).
Ahora debemos indicar en qu parte de nuestro reporte queremos que se muestren los valores correspondientes a los atributos de los
objetos"Participante"quelepasemos.Paraesosimplementearrastramoslosfieldscorrespondientesallugarenelquequeremos
que se muestren (arrastramos el field "nombre" a donde queremos que se muestre el atributo "nombre", el campo "username" en
donde queremos que se muestre el atributo "username", etc.) desde el "Report Inspector". Al arrastrar los fields, iReport
agregarautomticamenteunencabezadoparaestefield,soloborrenelencabezadoagregado=).
Estosfieldsloscolocaremosenlabanda"Detail1"lacualserepitecadavezquerecibeunnuevoobjetoycolocasusvaloresenla
mismafila(quedarmsclarocuandoejecutemoselejemplo).Alfinal,elreportedebequedardelasiguienteforma:
http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy.html
6/26
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
Por el momento esto es todo lo que necesitamos hacer en iReport para mostrar este reporte bsico. Hacemos clic en el botn
"CompileReport"paracompilarelreporteygenerarsuarchivo".jasper"respectivo.
Podemosverunavistapreviadelreportehaciendoclicenlapestaa"Preview".Asegrensedeseleccionarel"Emptydatasource"
antesdeverelpreview,delocontrariolesaparecerunerrorindicadoqueeldocumentonotienepginas.Alfinaldebenveralgocomo
esto:
Los"nulls"aparecenporquenoserecuperningnvalorquecoincidieraconelnombredeesefieldusandonuestrodatasource(que
enestecasoestvaco,locualsolucionaremosacontinuacin).
RegresamosalNetBeansyahoracrearemosunaclasequeimplementelainterface"JRDataSource"delaquehablantes.Estaclase
serlaqueusaremoscomodatasourceparanuestroreporte,ylaqueregresarlosvalorescorrespondientesacadaunodelosfieldsque
creamosantes.
Primeroagregamosanuestroproyectolalibreria"JasperReports"quecreamosenelprimertutorialdelaseriedeJasperReports. En
estaocasinnonecesitaremosagregareljarconelDriverdelabasededatos,yaquenousaremosninguna^_^.
Creamos una nueva clase llamada "ParticipantesDatasource" y hacemos que esta nueva clase implemente la interface
"JRDataSource".PodemoshacerqueNetBeansimplementedeformaautomticalosmtodosdeestainterface(proporcionandouna
implementacin vaca) presionando las teclas "Alt + Insert" y seleccionando la opcin "Implement Method" en el men
contextualqueseabre.
Con esto se abrir una ventana llamada "GenerateImplementMethods" en la cual seleccionamos la interface "JRDataSource"
paraqueseseleccionendeformaautomticatodossusmtodosyhacemosclicenelbotn"Generate".
http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy.html
7/26
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
Conestotendremoslosdosmtodosimplementadosyencuyoscuerpossolohabr:
thrownewUnsupportedOperationException("Notsupportedyet.");
Ahora agregaremos a nuestra clase un atributo de tipo "java.util.List" llamado "listaParticipantes" que mantendr
justamenteeso:lalistadelosparticipantesdeloscualesmostraremoslosdatosenelreporte.Inicializamosestalistaaunobjetodetipo
"java.util.ArrayList",deestaforma:
privateList<Participante>listaParticipantes=newArrayList<Participante>();
Tambinagregamosuncontadorllamado"indiceParticipanteActual"detipo"int",queusaremosenseguida,yloinicializamosa
"1"unpocomsadelanteexplicarporquestevalor:
privateintindiceParticipanteActual=1;
Hastaahoranuestraclasedebeverseas:
publicclassParticipantesDatasourceimplementsJRDataSource
{
privateList<Participante>listaParticipantes=newArrayList<Participante>();
privateintindiceParticipanteActual=1;
publicObjectgetFieldValue(JRFieldjrf)throwsJRException
{
thrownewUnsupportedOperationException("Notsupportedyet.");
}
publicbooleannext()throwsJRException
{
thrownewUnsupportedOperationException("Notsupportedyet.");
}
}
AhoraimplementaremoselmtodogetFieldValue.EstemtodorecibeunargumentodetipoJRField.Esteparmetronosindicar
porculdelos"fields"nosestpreguntandoelreporte.
En la implementacin de este mtodo regresaremos los valores correspondientes a cada uno de los atributos de nuestros objetos
"Participante"conformesevayanpidiendo.Porloqueelmtodoquedaas:
http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy.html
8/26
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
publicObjectgetFieldValue(JRFieldjrField)throwsJRException
{
Objectvalor=null;
if("nombre".equals(jrField.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getNombre();
}
elseif("username".equals(jrField.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getUsername();
}
elseif("password".equals(jrField.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getPassword();
}
elseif("comentarios".equals(jrField.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getComentarios();
}
returnvalor;
}
Donde bsicamente ocurre lo que dije anteriormente: cada vez que el reporte pregunta por el valor de un atributo del objeto
"Participante" actual (al que hace referencia el contador "indiceParticipanteActual") se regresa el valor correspondiente.
EstapeticinsehaceenbasealnombredelfieldquecreamosdesdeiReport.
Ahoratalvezseestnpreguntandoenqumomentoseincrementaelcontador?,ocmosabeJasperReportcuntosparticipantes
existen?Puesbien,ambascosasocurrengraciasalaimplementacindelmtodo"next()".
publicbooleannext()throwsJRException
{
return++indiceParticipanteActual<listaParticipantes.size();
}
JasperReportpreguntaaestemtodoparasabersiexisteotro"Participante"enlalista.Estemtodoeselprimeroquesellama
algenerarelreporte.Porloqueelcontadordebecomenzaren"1",ascuandoestemtodosellamalaprimeravezelcontadorqueda
en"0",ycuandoseinvocaalmtodo"getFieldValue"seregresaelobjetoParticipantedelndiceadecuado.
Esto es todo lo que necesitamos para que nuestro datasource funcione para generar reportes. Agregar un mtodo de utilidad a esta
clase,llamado"addParticipante",quemepermitaagregarunnuevoparticipantealalista(aunquesiloprefierenpuedenagregarel
setterde"listaParticipantes"):
publicvoidaddParticipante(Participanteparticipante)
{
this.listaParticipantes.add(participante);
}
Laclase"ParticipantesDatasource"quedadeestaforma(omitiendolosimports):
http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy.html
9/26
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
publicclassParticipantesDatasourceimplementsJRDataSource
{
privateList<Participante>listaParticipantes=newArrayList<Participante>();
privateintindiceParticipanteActual=1;
publicObjectgetFieldValue(JRFieldjrf)throwsJRException
{
Objectvalor=null;
if("nombre".equals(jrf.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getNombre();
}
elseif("username".equals(jrf.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getUsername();
}
elseif("password".equals(jrf.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getPassword();
}
elseif("comentarios".equals(jrf.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getComentarios();
}
returnvalor;
}
publicbooleannext()throwsJRException
{
return++indiceParticipanteActual<listaParticipantes.size();
}
publicvoidaddParticipante(Participanteparticipante)
{
this.listaParticipantes.add(participante);
}
}
ParticipantesDatasourcedatasource=newParticipantesDatasource();
for(inti=1;i<=10;i++)
{
Participantep=newParticipante(i,"Particpante"+i,"Usuario"+i,"Pass"+i,"Comentariospara
"+i);
datasource.addParticipante(p);
}
El resto del cdigo para generar el reporte es similar al del primer tutorial de JasperReports, solo que en esta ocasin en lugar de
pasar un objeto de tipo "Connection" al mtodo "fillReport" del "JasperFillManager" pasamos nuestro objeto
"ParticipantesDatasource"deestaforma:
JasperPrintjasperPrint=JasperFillManager.fillReport(reporte,null,datasource);
Alfinalelcdigodenuestraclase"Main"quedaas:
http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy.html
10/26
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
publicclassMain
{
publicstaticvoidmain(String[]args)throwsException
{
ParticipantesDatasourcedatasource=newParticipantesDatasource();
for(inti=1;i<=10;i++)
{
Participantep=newParticipante(i,"Particpante"+i,"Usuario"+i,"Pass"+i,"Comentari
ospara"+i);
datasource.addParticipante(p);
}
JasperReportreporte=(JasperReport)JRLoader.loadObject("reporte2.jasper");
JasperPrintjasperPrint=JasperFillManager.fillReport(reporte,null,datasource);
JRExporterexporter=newJRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE,newjava.io.File("reporte2PDF.pdf"));
exporter.exportReport();
}
}
Podrnoserelreportemsbelloomstildelmundo,peroesnuestro=D.
Podemosverquelosdatosimportantes(losdatosdelos"Participantes")aparecenenlabanda"Details1"(dondecolocamoslos
fields)yqueestabandaserepiteporcadaunodelosparticipantesdelalista.
Bien, con esto vemos que podemos crear nuestros propios datasources y pasar datos para generar reportes sin la necesidad de una
conexin a base de datos. Es bastante sencillo, solamente debemos proporcionar una clase que implemente la interface
"JRDataSource"yqueregreselosvalorescorrespondientesalosfieldsdelreporte.
Aunqueestoyaesbastantefcilytil,existeunaformaanmssimpleparacrearundatasource,sinlanecesitaddeimplementarla
interface"JRDataSource".EstoesgraciasaunconjuntodeclasesqueJasperReportsyanosproporcionayrealizanbsicamentela
mismafuncinquelaclase"ParticipantesDatasource"queacabamosdecrear.Estasclasesson:
JRBeanCollectionDataSource
JRJpaDataSource
JRBeanArrayDataSource
Lascualesyaimplementanlainterface"JRDataSource".Cadaunafuncionacondistintostiposdedatos,peroenquenosinteresaen
este momento es "JRBeanCollectionDataSource" que puede convertir una "java.util.Collection" en un DataSource de
formaautomtica.Modificaremosnuestromtodo"main"parahacerusodeestaclase.
Ahora,envezdellenarnuestro"ParticipantesDatasource"enelciclosimplementellenaremosun"java.util.List":
http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy.html
11/26
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
ListlistaPariticipantes=newArrayList();
for(inti=1;i<=10;i++)
{
Participantep=newParticipante(i,"Particpante"+i,"Usuario"+i,"Pass"+i,"Comentariospara
"+i);
listaPariticipantes.add(p);
}
JasperPrintjasperPrint=JasperFillManager.fillReport(reporte,null,newJRBeanCollectionDataSource(listaPa
riticipantes));
Alfinalnuestraclase"Main"quedaas:
publicclassMain
{
publicstaticvoidmain(String[]args)throwsException
{
ListlistaPariticipantes=newArrayList();
for(inti=1;i<=10;i++)
{
Participantep=newParticipante(i,"Particpante"+i,"Usuario"+i,"Pass"+i,"Comentari
ospara"+i);
listaPariticipantes.add(p);
}
JasperReportreporte=(JasperReport)JRLoader.loadObject("reporte2.jasper");
JasperPrintjasperPrint=JasperFillManager.fillReport(reporte,null,newJRBeanCollectionDataSource
(listaPariticipantes));
JRExporterexporter=newJRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE,newjava.io.File("reporte2PDF_2.pdf"));
exporter.exportReport();
}
}
Al ejecutar este cdigo se genera el archivo "reporte2PDF_2.pdf" en el directorio raz de nuestro proyecto, con el siguiente
contenido:
http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy.html
12/26
14/4/2015
TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
Elcualesidnticoalreportegeneradoconlaclase"ParticipantesDatasource".
Yconestovemosquegraciasalaclase"JRBeanCollectionDataSource"noesnecesarioqueproporcionemosnuestrapropiaclase
queimplementelainterface"JRDataSource",porloquelageneracindereportesesanmssimple^^.
Bien,estoestodoporahora.Esperoqueestepostlesseadeutilidad.
En el siguiente tutorial hablar de cmo funcionan los parmetros y las variables en JasperReport, para lo cual haremos uso del
reportequeacabamosdecrear.
Graciasatodosynoolvidendejarsusdudas,comentarios,ysugerencias.Todoesbienvenido.
Saludos.
Descargalosarchivosdeestetutorialdesdeaqu:
ReporteconDatasourcePropio
EntradasRelacionadas:
Parte1:ReportesconConexinaBasesdeDatos
Parte3:ParmetrosyVariables
Parte4:Reportesenaplicacionesweb
Parte5:GrficasenReportes
Parte6:Grupos
Parte7:Subreportes
PublicadoporAlexen20:57
divertido (0)
Reacciones:
interesante (2)
increible (0)
no me gusta (0)
74comentarios:
anthe 12deabrilde2009,17:03
Amigomepodriasayudar,coneltemaderealizarunaconeccionconhibernate,larealizoynoconsigounbuenresultadosoloun"cannot
openconnection",agregeelconectorelpathdondeestaelmapeodelabaseperoparecequealgoestamal,soyneofitaeneltemayno
encuentrounasolucionhelp!!
Responder
ProgramadorJava 12deabrilde2009,18:03
HolaAnthe.
Claroquesi,puedoayudarteconmuchogusto.Solonecesitounpocomsdeinformacinsobrequeestshaciendo.Supongoqueestas
haciendo uso de un DataSource propio (ya sea implementando la interface JRDataSource o a travs de un
JRBeanCollectionDataSource), y que obtienes los datos a travs de Hibernate. Estoy en lo correcto?, o lo estas haciendo de otra
forma?
Podrasdecirmeenqulneatedaelerror?,ohayformadequesubastucdigoaalgnsitioparapoderrevisarlo?.
Saludos
Responder
Annimo 19deabrilde2009,10:40
Hola
Disculpaparaquesonlos"seters"ylos"geters"??
SAludos
Miguel.
Responder
Respuestas
AramSalinas 10deabrilde2013,10:24
mmmmhserefierealosmtodosrelacionadosalaspropiedades,comoasignarlesunvalor"SET"orecuperarunvalor"GET"
deellas.
saludos!
Responder
http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy.html
13/26