Tuesday, June 21, 2005

Passing in a parameter to JasperReports

First, I created an html file with the following (> and < style="font-size:85%;">form name=testForm id=testForm action="/jsp/test.jsp"

Enter user number: br
input type=field name="usernumber" br
input type=submit value="Retrieve Info" br

/form

Now, in /jsp/test.jsp

<%@page import="javax.sql.DataSource" %>
<%@page import="java.sql.Connection" %>
<%@page import="java.sql.CallableStatement" %>
<%@page import="java.sql.Statement" %>
<%@page import="java.sql.ResultSet" %>
<%@page import="java.util.Date" %>
<%@page import="javax.naming.InitialContext" %>
<%@page import="java.util.ArrayList" %>
<%@page import="java.lang.Integer" %>


<%@ page errorPage="error.jsp" %>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="net.sf.jasperreports.engine.util.*" %>
<%@ page import="net.sf.jasperreports.engine.export.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>

<%

InitialContext context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/test/testDB");
Connection connection = dataSource.getConnection();

File reportFile = new File(application.getRealPath("/reports/JasperTest.jasper"));

JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());

Map parameters = new HashMap();
parameters.put("ReportTitle", "User Report");
parameters.put("BaseDir", reportFile.getParentFile());
Integer usernumber = null;
if( request.getParameter("usernumber") != null )
{
usernumber = new Integer(Integer.parseInt( request.getParameter("usernumber")));
parameters.put("usernumber", usernumber);
}
else
parameters.put("usernumber", new Integer(0));


JasperPrint jasperPrint =
JasperFillManager.fillReport(
jasperReport,
parameters,
connection
);

JRHtmlExporter exporter = new JRHtmlExporter();

StringBuffer sbuffer = new StringBuffer();

Map imagesMap = new HashMap();
session.setAttribute("IMAGES_MAP", imagesMap);

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "image.jsp?image=");

exporter.exportReport();
%>

All this does is pass usernumber=somethinghere into the JSP. The JSP then pulls that value of the request object and adds it to the parameters that will be used when calling the JasperReport.

Ok, now in JasperReport I just use the wizard and slap together a report as detailed in previous posts, with a fixed number in the SQL query where I want usernumber to be. The report gets some data from the database base on this parameter. Now go to objects tab & then parameters in the lower left, and add usernumber as an integer parameter. I put a default value expression of new Integer(0). Go to View> Report Query and change the fixed number to "$P!{usernumber}" without the quotes.

Save the report as JasperTest.jrxml-- if you get a warning about the project name and file name not matching just hit yes. Compile it using the button in the top right. Place the .jasper file in your webapps /reports/ directory and it should work now.

No comments:

Labels

Blog Archive

Contributors