JSF y JasperReport

773 views
Skip to first unread message

dany

unread,
May 9, 2006, 7:56:41 AM5/9/06
to JavaSOS
Tengo problemas al tratar de generar un reporte (PDF) con el
jasperreport desde una pagina web (studio creator 2 - Sun Application
Sever 8). Si alquien lo consiguió o sabe de algun lugar que tengan un
ejemplo que funcione.
Me sale un error "Error Loading Expression Class" y mas o menos se por
donde viene la mano (no encuentra File_nnnnnnn_nnnnn.class que es el
nombre del archivo que genera el iReport cunado compilo el reporte.),
En netbeans funciona perfecto.

Pablo

unread,
May 9, 2006, 11:15:46 PM5/9/06
to jav...@googlegroups.com
Hola,

el archivo que tiene que estar en tu sitio es el compilado del reporte, el
archivo *.jasper.

te copio un ejemplo de jsp que recibe parametros y devuelve un reporte
populado y en formato pdf.

saludos,
Pablo
---desde-aca----------------------------------------------------------------------
<%@ page errorPage="error.jsp" %>
<%@ page import="datasource.*" %>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>

<%
File reportFile = new
File(application.getRealPath("/reports/pres_ejec_fisica.jasper"));
if (!reportFile.exists())
throw new JRRuntimeException("File pres_ejec_fisica.jasper not found. The
report design must be compiled first.");

Map parameters = new HashMap();
parameters.put("CBperiodo", request.getParameter("CBperiodo"));
parameters.put("CBid_institucion",
request.getParameter("CBid_institucion"));
parameters.put("CBprograma_id", request.getParameter("CBprograma_id"));
parameters.put("CBsubprograma_id",
request.getParameter("CBsubprograma_id"));
parameters.put("CBtrimestre", request.getParameter("CBtrimestre"));
parameters.put("CBmeta", request.getParameter("CBmeta"));
parameters.put("BaseDir", reportFile.getParentFile());


Connection conn = null;
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/unabase",
"usuario", "password");

byte[] bytes =
JasperRunManager.runReportToPdf(
reportFile.getPath(),
parameters,
conn
);

response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
%>
---hasta-aca-----------------------------------------------------

Bernardo

unread,
May 10, 2006, 7:56:36 AM5/10/06
to JavaSOS
El jasper reports cuando compila los reportes on line tiene un
classpath propio que no es el mismo que tiene el classloader del
servidor web.

Puede ser que no este encontrando alguna de las clases que necesita
para compilar el reporte, para solucionar esto podes crear un
jasperreports.properties que busca y de ahi lee un par de lineas de
configuracion como por ejemplo el classpath.

dany

unread,
May 11, 2006, 7:27:03 AM5/11/06
to JavaSOS
Disculpame que te moletste, pero no podrias dar un ejemplito porque no
entiendo bien como conseguirlo.

Igualmente te comento que en NetBeans Funciona barbaro, el problema es
con Studio Creator 2 y el AppSer 8.

Francisco Lopez Valenzuela

unread,
May 11, 2006, 2:39:33 PM5/11/06
to jav...@googlegroups.com
Hola yo actualmente trabajo con jsf y realizo reportes con jasper reports, claro que los diseño con el ireport, con ello creo un *.jasper el cual lo llamos desde mi jsp, al cual debo llamarlo con extension jsf o faces de acuerdo a como hayas configurado en l web.xml entonces en mi aplicacion tengo una carpeta llamada reports, entonces llamo a el .jasper de la manera como si no me equivoco antes te dijeron:
 
File reportFile = new File(application.getRealPath("/reports/xxxx.jasper" ));
 
pero tambien debo de tener en la carpeta reports tengo el archivo xxxx.jrxml que es la definicion del reporte como lo cree con el ireport este me lo genera, pero tengo que ponerlo para que funcione, mira explicame bien tu problema quizas pueda ayudarte.
 
2006/5/11, dany <danielag...@gmail.com>:

dany

unread,
May 12, 2006, 7:50:25 AM5/12/06
to JavaSOS

/////---------------------------------CODIGO----------------------------------------------/////

public String getMyFuckingReport() {

String fileReportToExecuting =
"/tmp/reports/fucking_report.jasper";

try {
byte[] pdf = null;
pdf =
JasperRunManager.runReportToPdf(fileReportToExecuting,new HashMap(),
new JREmptyDataSource());

FacesContext faces =
javax.faces.context.FacesContext.getCurrentInstance();
HttpServletResponse response
=(HttpServletResponse)faces.getExternalContext().getResponse();
response.setContentType("application/pdf");
response.setContentLength(pdf.length);
response.setHeader("Content-disposition","attachment;
filename=\"milagro.pdf\"");
ServletOutputStream out;
out = response.getOutputStream();
out.write(pdf);
faces.responseComplete();

}catch (Exception e){
error(e);

}

return null;
}

///////------------------------------FIN
CODIGO----------------------------------------/////

Cuando ejecuto esta linea me sale el siguiente error: "Error loading
expression class : fucking_report_1147177775799_808859"

pdf =
JasperRunManager.runReportToPdf(fileReportToExecuting,new HashMap(),
new JREmptyDataSource());


En la carpeta lib ("dReport2/web/WEB-INF/lib")le puse todas las
librerias (jar) que trae el iReport .

Los reportes (tanto .jasper como .jrxml) estan en el /tmp/reports/

Por otro lado te comento que en el ejemplo como tenes declarado el
<"File reportFile = new
File(application.getRealPath("/reports/fucking_report.jasper"); "> a
mi no me funciona porque no reconoce application. y si lo obtengo con
un this.getApplication() no tiene el metodo getRealPath.

De ser posible no me podrias mandar un ejemplo que mencione todo lo que
hace falta tocar, me refiero a si es necesario tocar algun xml o
importart algun paquete en particular o no se....

Desde ya muchas gracias.

dany

unread,
May 12, 2006, 7:51:44 AM5/12/06
to JavaSOS
me olvidavaç, estoy usando el jaserpreport.1.2.2.jar

dany

unread,
May 15, 2006, 3:05:48 PM5/15/06
to JavaSOS
Listo muchachos ya encontre el problema.
Muchas gracias por todo.

Bernardo

unread,
May 16, 2006, 8:25:05 AM5/16/06
to JavaSOS
Pone cual era la solucion asi ya le queda para otro.
Gracias.

dany

unread,
May 16, 2006, 8:47:38 AM5/16/06
to JavaSOS
Ok, lo pongo.
Despues de investigar los mensages del servidor(server.log) caí en la
cuenta de que eran problemas de permisos.

Una forma rápida de lograr hacerlo funcionar es hacer lo siguiente con
el server.policy.

grant {
permission java.security.AllPermission;
};

Ojo, vean que con esto pueden salvar el problema de los permisos, pero
tambien quedan al descubierto ante codigos maliciosos.

Habria que hilar mas fino para ver a quien darle que permisos.
Sigo investigando, si lo encuentro o alguien lo resuleve lo posteamos.

Reply all
Reply to author
Forward
0 new messages