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-----------------------------------------------------
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.
Igualmente te comento que en NetBeans Funciona barbaro, el problema es
con Studio Creator 2 y el AppSer 8.
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.
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.