I am not aware if the issue has been solved by others, but when I tried to use JasperReportViewServlet for displaying charts/images in html files, it didn't work. Then I checked the source code, there is a line marked "// todo fixme... currently not working...". After exploring more on Jasper report document, I got the problem solved. Basically we need to load images from IMAGES_MAP. The following is the modified code. Anybody can check the code and compile it into the lib?
Thanks. Manyuan Jin /* * Copyright (c) 2002-2003 by OpenSymphony * All rights reserved. */ package com.opensymphony.webwork.views.jasperreports; import com.opensymphony.webwork.ServletActionContext; import com.opensymphony.xwork.util.OgnlValueStack; import dori.jasper.engine.*; import dori.jasper.engine.export.*; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; /** * Provide a view of a webwork action as a jasper report. The report format will be determined by * the format parameter passed in the xwork action definition. * Example action definition: * * <action name="jasperTest" class="com.opensymphony.webwork.views.jasperreports.example.OrderListAction" > * <param name="dataSource">orders</param> * <param name="format">PDF</param> * <result name="success" type="dispatcher"> * <param name="location">orderList.jasper</param> * </result> * <interceptor-ref name="defaultStack"/> * </action> * * Valid report format strings are the following: * <ul> * <li>PDF</li> * <li>XML</li> * <li>HTML</li> * <li>XLS</li> * <li>CSV</li> * </ul> * It will then look for a compiled report definition of the form <code><view name>.jasper</code>, * run it to the appropriate output format and stream the results as the HTTP response. * * Ported to WebWork2: * * @author <a href="[EMAIL PROTECTED]">Rainer Hermanns</a> * @version $Id: JasperReportViewServlet.java,v 1.1 2003/10/03 05:45:27 cameronbraid Exp $ */ public class JasperReportViewServlet extends HttpServlet implements JasperReportConstants { //~ Static fields/initializers ///////////////////////////////////////////// protected static Log log = LogFactory.getLog(JasperReportViewServlet.class); //~ Instance fields //////////////////////////////////////////////////////// protected String IMAGES_URI = "/images/"; //~ Methods //////////////////////////////////////////////////////////////// /* (non-Javadoc) * @see javax.servlet.GenericServlet#init() */ public void init() throws ServletException { super.init(); if (getServletConfig().getInitParameter("IMAGES_URI") != null) { IMAGES_URI = getServletConfig().getInitParameter("IMAGES_URI"); } } /** * Service a HTTP request * @param request the request to service * @param response the response to send to the client */ public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException { String imageName=request.getParameter("image"); //load image from IMAGES_MAP if(imageName !=null){ Map imagesMap = (Map) request.getSession().getAttribute("IMAGES_MAP"); if (imagesMap != null){ byte[] imageData = (byte[]) imagesMap.get(imageName); try{ response.setContentLength(imageData.length); ServletOutputStream ouputStream = response.getOutputStream(); ouputStream.write(imageData, 0, imageData.length); ouputStream.flush(); ouputStream.close(); } catch(IOException ioe){ log.warn(ioe.toString()); } } } else{ //construct the data source for the report OgnlValueStack stack = ServletActionContext.getContext().getValueStack(); String dataSource = "" + request.getAttribute("dataSource"); OgnlValueStackDataSource stackDataSource = new OgnlValueStackDataSource(stack, dataSource); //get the output format String outputFormat = "" + request.getAttribute("format"); // (Map) ActionContext.getContext().getSession().get("IMAGES_MAP"); if (outputFormat == null) { outputFormat = FORMAT_PDF; } if (!"contype".equals(request.getHeader("User-Agent"))) { // Determine the directory that the report file is in and set the reportDirectory parameter String systemId = getServletContext().getRealPath(request.getServletPath()); Map parameters = new OgnlValueStackShadowMap(stack); File directory = new File(systemId.substring(0, systemId.lastIndexOf(File.separator))); parameters.put("reportDirectory", directory); byte[] output = null; JasperPrint jasperPrint = null; // Fill the report and produce a print object try { JasperReport jasperReport = JasperManager.loadReport(systemId); jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, stackDataSource); } catch (JRException e) { log.error("Error building report for uri " + systemId, e); throw new ServletException(e.getMessage(), e); } // Export the print object to the desired output format try { if (outputFormat.equals(FORMAT_PDF)) { response.setContentType("application/pdf"); // response.setHeader("Content-disposition", "inline; filename=report.pdf"); output = JasperExportManager.exportReportToPdf(jasperPrint); } else { JRExporter exporter = null; if (outputFormat.equals(FORMAT_CSV)) { response.setContentType("text/plain"); exporter = new JRCsvExporter(); } else if (outputFormat.equals(FORMAT_HTML)) { response.setContentType("text/html"); Map imagesMap = new HashMap(); request.getSession().setAttribute("IMAGES_MAP", imagesMap); exporter = new JRHtmlExporter(); exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap); exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "*.jasper?image="); } else if (outputFormat.equals(FORMAT_XLS)) { response.setContentType("application/vnd.ms-excel"); exporter = new JRXlsExporter(); } else if (outputFormat.equals(FORMAT_XML)) { response.setContentType("text/xml"); exporter = new JRXmlExporter(); } else { throw new ServletException("Unknown report format: " + outputFormat); } output = exportReportToBytes(jasperPrint, exporter); } } catch (JRException e) { String message = "Error producing " + outputFormat + " report for uri " + systemId; log.error(message, e); throw new ServletException(e.getMessage(), e); } response.setContentLength(output.length); ServletOutputStream ouputStream; try { if (log.isDebugEnabled()) { //log.debug("Writing " + output.length + " bytes to output stream"); } ouputStream = response.getOutputStream(); ouputStream.write(output); ouputStream.flush(); ouputStream.close(); } catch (IOException e) { log.error("Error writing report output", e); throw new ServletException(e.getMessage(), e); } } else { // Code to handle "contype" request from IE try { ServletOutputStream outputStream; response.setContentType("application/pdf"); response.setContentLength(0); outputStream = response.getOutputStream(); outputStream.close(); } catch (IOException e) { log.error("Error writing report output", e); throw new ServletException(e.getMessage(), e); } } } } /** * Run a Jasper report to CSV format and put the results in a byte array * @param jasperPrint The Print object to render as CSV * @param exporter The exporter to use to export the report * @return A CSV formatted report * @throws dori.jasper.engine.JRException If there is a problem running the report */ private byte[] exportReportToBytes(JasperPrint jasperPrint, JRExporter exporter) throws JRException { byte[] output; ByteArrayOutputStream baos = new ByteArrayOutputStream(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos); exporter.exportReport(); output = baos.toByteArray(); return output; } } ------------------------------------------------------- This SF.net email is sponsored by: Perforce Software. Perforce is the Fast Software Configuration Management System offering advanced branching capabilities and atomic changes on 50+ platforms. Free Eval! http://www.perforce.com/perforce/loadprog.html _______________________________________________ Opensymphony-webwork mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork