与Java Web应用程序的Birt集成

问题描述 投票:0回答:5

我正在基于birt报告的项目中工作,我对该项目进行了更新并使用了tomcat 7,并且在该birt报告无法工作且旧版本为2.6.2之后,有人可以建议我如何使用以下方法升级birt报告:最新版本以及如何将其部署在tomcat 7服务器上

提前感谢

java birt
5个回答
0
投票

web.xml中

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>BirtDemo</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>loadReport</servlet-name> <servlet-class>BirtIntegration.Controller.BirtReportController</servlet-class> </servlet> <servlet-mapping> <servlet-name>loadReport</servlet-name> <url-pattern>/loadReport</url-pattern> </servlet-mapping> </web-app>

BirtIntegration.BirtViewer

package BirtIntegration.BirtViewer; import java.math.BigDecimal; import java.text.ParseException; import java.util.Date; import java.util.Locale; import org.eclipse.birt.core.format.DateFormatter; import org.eclipse.birt.core.format.NumberFormatter; import org.eclipse.birt.core.format.StringFormatter; import org.eclipse.birt.report.engine.api.IScalarParameterDefn; import com.ibm.icu.util.TimeZone; import com.ibm.icu.util.ULocale; /** * Utilites class to convert report parameter value between object and string. */ public class ReportParameterConverter { private String format = null; private ULocale uLocale = null; private TimeZone timeZone = TimeZone.getDefault( ); private StringFormatter sf = null; private DateFormatter df = null; private NumberFormatter nf = null; /** * @param format format to format report parameter, or recover parameter value as object * given a string as report parameter value * @param locale the locale to format/parse the parameter value */ public ReportParameterConverter( String format, Locale locale ) { this( format, ULocale.forLocale( locale ) ); } /** * Constructor. * * @param format * @param uLocale */ public ReportParameterConverter( String format, ULocale uLocale ) { this( format, uLocale, null ); } /** * Constructor. * * @param format * @param uLocale * @param timeZone */ public ReportParameterConverter( String format, ULocale uLocale, TimeZone timeZone ) { this.format = format; this.uLocale = uLocale; if ( timeZone != null ) { this.timeZone = timeZone; } } /** * Get string formatter. * * @return StringFormatter object */ private StringFormatter getStringFormatter( ) { if ( sf == null && uLocale != null ) { sf = new StringFormatter( uLocale ); if ( format != null ) { sf.applyPattern( format ); } } return sf; } /** * Get number formatter. * * @return NumberFormatter object */ private NumberFormatter getNumberFormatter( ) { if ( nf == null && uLocale != null ) { nf = new NumberFormatter( uLocale ); if ( format != null ) { nf.applyPattern( format ); } } return nf; } /** * Get date formatter. * * @return DateFormatter object */ private DateFormatter getDateFormatter( ) { if ( df == null && uLocale != null ) { df = new DateFormatter( uLocale, timeZone ); if ( format != null ) { df.applyPattern( format ); } } return df; } /** * Convert report parameter value object into string. * * @param reportParameterObj report parameter value object. * @return parameter value in string. */ public String format( Object reportParameterObj ) { String reportParameterValue = null; if ( reportParameterObj != null && uLocale != null ) { if ( reportParameterObj instanceof String ) { StringFormatter sf = getStringFormatter( ); if ( sf != null ) { reportParameterValue = sf.format( ( String ) reportParameterObj ); } else { reportParameterValue = reportParameterObj.toString( ); } } else if ( reportParameterObj instanceof Date ) { DateFormatter df = getDateFormatter( ); if ( df != null ) { reportParameterValue = df.format( ( Date ) reportParameterObj ); } else { reportParameterValue = reportParameterObj.toString( ); } } else if ( reportParameterObj instanceof Double ) { NumberFormatter nf = getNumberFormatter( ); if ( nf != null ) { reportParameterValue = nf .format( ( (Double) reportParameterObj ) .doubleValue( ) ); } else { reportParameterValue = reportParameterObj.toString( ); } } else if ( reportParameterObj instanceof BigDecimal ) { NumberFormatter nf = getNumberFormatter( ); if ( nf != null ) { reportParameterValue = nf .format( (BigDecimal) reportParameterObj ); } else { reportParameterValue = reportParameterObj.toString( ); } } else if ( reportParameterObj instanceof Boolean ) { reportParameterValue = ( ( Boolean ) reportParameterObj ).toString( ); } else if ( reportParameterObj instanceof Number ) { NumberFormatter nf = getNumberFormatter( ); if ( nf != null ) { reportParameterValue = nf.format( ( ( Number ) reportParameterObj ) ); } else { reportParameterValue = reportParameterObj.toString( ); } } else { reportParameterValue = ( reportParameterObj.toString( ) ); } } return reportParameterValue; } /** * Convert report parameter from string into object. Need to be pointed out * is it return a Double object when the value type is Float. * * @param reportParameterValue * report parameter value in string. * @param parameterValueType * report parameter type. * @return parameter value object. */ public Object parse( String reportParameterValue, int parameterValueType ) { Object parameterValueObj = null; if ( reportParameterValue != null && uLocale != null ) { switch ( parameterValueType ) { case IScalarParameterDefn.TYPE_STRING: { StringFormatter sf = getStringFormatter( ); if ( sf == null ) { parameterValueObj = null; break; } try { parameterValueObj = sf.parser( reportParameterValue ); } catch ( ParseException e ) { parameterValueObj = reportParameterValue; } break; } case IScalarParameterDefn.TYPE_DATE_TIME: { parameterValueObj = parseDateTime( reportParameterValue ); break; } case IScalarParameterDefn.TYPE_FLOAT: { NumberFormatter nf = getNumberFormatter( ); if ( nf == null ) { parameterValueObj = null; break; } try { Number num = nf.parse( reportParameterValue ); if ( num != null ) { parameterValueObj = new Double( num.toString( ) ); } } catch ( ParseException e ) { nf.applyPattern( "General Number" ); try { Number num = nf.parse( reportParameterValue ); if ( num != null ) { parameterValueObj = new Double( num.toString( ) ); } } catch ( ParseException ex ) { parameterValueObj = null; } } break; } case IScalarParameterDefn.TYPE_DECIMAL: { NumberFormatter nf = getNumberFormatter( ); if ( nf == null ) { parameterValueObj = null; break; } try { Number num = nf.parse( reportParameterValue ); if ( num != null ) { parameterValueObj = new BigDecimal( num.toString( ) ); } } catch ( ParseException e ) { nf.applyPattern( "General Number" ); try { Number num = nf.parse( reportParameterValue ); if ( num != null ) { parameterValueObj = new BigDecimal( num.toString( ) ); } } catch ( ParseException ex ) { parameterValueObj = null; } } break; } case IScalarParameterDefn.TYPE_BOOLEAN: { parameterValueObj = Boolean.valueOf( reportParameterValue ); break; } case IScalarParameterDefn.TYPE_DATE: { try { parameterValueObj = java.sql.Date .valueOf( reportParameterValue ); } catch ( IllegalArgumentException ie ) { parameterValueObj = parseDateTime( reportParameterValue ); if ( parameterValueObj != null ) { parameterValueObj = new java.sql.Date( ( (Date) parameterValueObj ).getTime( ) ); } } break; } case IScalarParameterDefn.TYPE_TIME: { try { parameterValueObj = java.sql.Time .valueOf( reportParameterValue ); } catch ( IllegalArgumentException ie ) { parameterValueObj = parseDateTime( reportParameterValue ); if ( parameterValueObj != null ) { parameterValueObj = new java.sql.Time( ( (Date) parameterValueObj ).getTime( ) ); } } break; } //can use class DataTypeUtil to convert case IScalarParameterDefn.TYPE_INTEGER: { NumberFormatter nf = getNumberFormatter( ); if ( nf == null ) { parameterValueObj = null; break; } try { Number num = nf.parse( reportParameterValue ); if ( num != null ) { parameterValueObj = Integer.valueOf( num.intValue( ) ); } } catch( ParseException ex ) { nf.applyPattern( "General Number" ); try { Number num = nf.parse( reportParameterValue ); if ( num != null ) { parameterValueObj = Integer.valueOf( num.intValue( ) ); } } catch( ParseException pex ) { try { parameterValueObj = Integer.valueOf( reportParameterValue ); } catch( NumberFormatException nfe ) { parameterValueObj = null; } } } } } } return parameterValueObj; } /** * Parse the input string to an object. * * @param reportParameterValue * input string to parse * @return an object */ protected Object parseDateTime( String reportParameterValue ) { DateFormatter df = getDateFormatter( ); if ( df == null ) { return null; } try { return df.parse( reportParameterValue ); } catch ( ParseException e ) { df = new DateFormatter( "Short Date", uLocale ); try { return df.parse( reportParameterValue ); } catch ( ParseException ex ) { df = new DateFormatter( "Medium Time", uLocale ); try { return df.parse( reportParameterValue ); } catch ( ParseException exx ) { return null; } } } } }

0
投票
package BirtIntegration.BirtViewer; import java.io.File; import java.util.logging.Level; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import BirtIntegration.factory.BirtEngineFactory; /** * This class is responsible for initlizing birt engine configuring birt engine,and processing and rendering reports. * */ public class ReportProcessor { private BirtEngineFactory birtEngineFactory; private ReportRenderer reportRenderer; private static ReportProcessor reportProcessor =null; //private constructor for single tone object. private ReportProcessor(){ } public boolean initilizeBirtEngine(){ boolean isInitialized =true; reportRenderer = new ReportRenderer(); reportRenderer.setBirtEngine( this.getBitEngineFactory().getEngine() ); System.out.println("Bit Engine Successfully Started."); return isInitialized; } /** * Annotated with @ bean and will create BirtEngineFactory bean. * @return */ private BirtEngineFactory getBitEngineFactory(){ birtEngineFactory = BirtEngineFactory.getBirtEngineFactory() ; //uncomment to use logging //birtEngineFactory.setLogLevel( Level.FINEST); //birt engine logs will be created under this directory. //currently this line is commented //birtEngineFactory.setLogDirectory( new File("E:/WorkSpaces/PracticeWorkspace/BirtIntegration/birtlogs")); return birtEngineFactory; } public void shutDownBirtEngine(){ birtEngineFactory.destroy(); } public void processReport(HttpServletRequest request, HttpServletResponse response) { reportRenderer.processReportDesignDocAndRenderReport(request, response); } public static ReportProcessor getReportProcessor() { if(reportProcessor !=null){ return reportProcessor; } reportProcessor = new ReportProcessor(); return reportProcessor; } }

0
投票
package BirtIntegration.BirtViewer; import java.io.UnsupportedEncodingException; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.birt.report.engine.api.EXCELRenderOption; import org.eclipse.birt.report.engine.api.EngineConstants; import org.eclipse.birt.report.engine.api.HTMLRenderOption; import org.eclipse.birt.report.engine.api.HTMLServerImageHandler; import org.eclipse.birt.report.engine.api.IGetParameterDefinitionTask; import org.eclipse.birt.report.engine.api.IPDFRenderOption; import org.eclipse.birt.report.engine.api.IParameterDefnBase; import org.eclipse.birt.report.engine.api.IRenderOption; import org.eclipse.birt.report.engine.api.IRenderTask; import org.eclipse.birt.report.engine.api.IReportDocument; import org.eclipse.birt.report.engine.api.IReportEngine; import org.eclipse.birt.report.engine.api.IReportRunnable; import org.eclipse.birt.report.engine.api.IRunTask; import org.eclipse.birt.report.engine.api.IScalarParameterDefn; import org.eclipse.birt.report.engine.api.PDFRenderOption; import org.eclipse.birt.report.engine.api.RenderOption; /** * This class is responsible for processing the reports and rendering or downloading the reports. * It handles the request for rendering the report. * The method processReportDesignDocAndRenderReport writes the content in response output stream. * */ public class ReportRenderer { public static final String PARAM_ISNULL = "__isnull"; public static final String UTF_8_ENCODE = "UTF-8"; private IReportEngine birtEngine; private String reportNameRequestParameter = "ReportName" ; private String reportFormatRequestParameter = "ReportFormat"; private IRenderOption renderOptions ; //private static final Logger logger = Logger.getLogger(BirtView.class); public void setRenderOptions(IRenderOption ro) { this.renderOptions = ro; } /** * This is overridden method which responsible for processing report i.e .rptdesign document.and also rendering the report. * <br>It also handles downloading the report. * */ protected void processReportDesignDocAndRenderReport(HttpServletRequest request, HttpServletResponse response) { try{ //get report name from request object. String reportName = request.getParameter( this.reportNameRequestParameter ); //logger.info("Processing report:"+reportName); //get format in which we are going to render report i.e:html,pdf,excel String format = request.getParameter( this.reportFormatRequestParameter ); //pagination handling String pageNumber = request.getParameter("pageNumber"); int currentPageNumber=0; if(pageNumber!=null&&!pageNumber.equals("")) { currentPageNumber = Integer.valueOf(pageNumber); } //give the download report Name here. String downloadFileName = "MyReport"; //Base URL String baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+request.getContextPath(); ServletContext sc = request.getSession().getServletContext(); if( format == null ){ format="html";//default format } IReportRunnable runnable = null; //opend design document runnable = birtEngine.openReportDesign( sc.getRealPath("/Reports")+"/"+reportName ); //first process the report using Iruntask which will create the temp.rptdocument IRunTask iRunTask = birtEngine.createRunTask(runnable); iRunTask.getAppContext().put( EngineConstants.APPCONTEXT_BIRT_VIEWER_HTTPSERVET_REQUEST, request ); //put the parameter values from request to the report parameter iRunTask.setParameterValues(discoverAndSetParameters( runnable, request )); //create temp rpddocument iRunTask.run(sc.getRealPath("/Reports")+"/temp.rptdocument"); iRunTask.close(); //now do the rendering operation IReportDocument reportDoc = birtEngine.openReportDocument( sc.getRealPath("/Reports")+"/temp.rptdocument" ); IRenderTask iRenderTask= birtEngine.createRenderTask(reportDoc); //set the format response.setContentType( birtEngine.getMIMEType( format )); IRenderOption options = null == this.renderOptions ? new RenderOption() : this.renderOptions; //if html set html related options if( format.equalsIgnoreCase("html")){ HTMLRenderOption htmlOptions = new HTMLRenderOption( options); htmlOptions.setOutputFormat("html"); htmlOptions.setOutputStream(response.getOutputStream()); htmlOptions.setImageHandler(new HTMLServerImageHandler()); htmlOptions.setHtmlPagination(true); htmlOptions.setBaseImageURL(baseUrl+"/images");//TODO:Change from local host to actual path htmlOptions.setImageDirectory(sc.getRealPath("/images")); htmlOptions.setSupportedImageFormats("PNG"); htmlOptions.setEmbeddable(true); iRenderTask.setRenderOption(htmlOptions); //if pdf set pdf related downloading options }else if( format.equalsIgnoreCase("pdf") ){ PDFRenderOption pdfOptions = new PDFRenderOption( options ); pdfOptions.setSupportedImageFormats("PNG;GIF;JPG;BMP"); pdfOptions.setOutputFormat("pdf"); pdfOptions.setImageHandler(new HTMLServerImageHandler()); pdfOptions.setBaseURL(baseUrl); //pdfOptions.setOutputFileName("my.pdf"); pdfOptions.setOption(IPDFRenderOption.PAGE_OVERFLOW, IPDFRenderOption.FIT_TO_PAGE_SIZE); response.setHeader( "Content-Disposition", "attachment; filename="+downloadFileName ); pdfOptions.setOutputStream(response.getOutputStream()); iRenderTask.setRenderOption(pdfOptions); //if XLS set XLS related downloading options }else if(format.equalsIgnoreCase("xls")){ EXCELRenderOption xlsOptions = new EXCELRenderOption(options); xlsOptions.setOutputFormat("xls"); response.setHeader( "Content-Disposition", "attachment; filename="+downloadFileName); xlsOptions.setImageHandler(new HTMLServerImageHandler()); xlsOptions.setOutputStream(response.getOutputStream()); //xlsOptions.setOption(IRenderOption.EMITTER_ID, "org.uguess.birt.report.engine.emitter.xls"); xlsOptions.setOption(IRenderOption.EMITTER_ID, "org.eclipse.birt.report.engine.emitter.prototype.excel"); iRenderTask.setRenderOption(xlsOptions); }else{ response.setHeader( "Content-Disposition", "attachment; filename=\"" + downloadFileName + "\"" ); options.setOutputStream(response.getOutputStream()); options.setOutputFormat(format); iRenderTask.setRenderOption(options); } /* * This is used for pagination and setting the page number we want to display */ long pageCount = iRenderTask.getTotalPage(); if(currentPageNumber!=0) { if(pageCount >=currentPageNumber){ iRenderTask.setPageNumber(currentPageNumber); } } //save the page count in session to use for pagination. //using this page count we can implement pagination. request.getSession().setAttribute("pageCount", pageCount); //render report iRenderTask.render(); //close task and doc iRenderTask.close(); reportDoc.close(); //logger.info("Processing report completed successfully:"+reportName); }catch (Exception e) { //logger.error("Exception while proceessing report ",e); e.printStackTrace(); } } /** * Set parameters from request to the report parameter. * * @param report * @param request * @return * @throws Exception */ protected HashMap discoverAndSetParameters( IReportRunnable report, HttpServletRequest request ) throws Exception{ HashMap<String, Object> parms = new HashMap<String, Object>(); IGetParameterDefinitionTask task = birtEngine.createGetParameterDefinitionTask( report ); @SuppressWarnings("unchecked") Collection<IParameterDefnBase> params = task.getParameterDefns( true ); Iterator<IParameterDefnBase> iter = params.iterator( ); while ( iter.hasNext( ) ) { IParameterDefnBase param = (IParameterDefnBase) iter.next( ); IScalarParameterDefn scalar = (IScalarParameterDefn) param; if( request.getParameter(param.getName()) != null && !request.getParameter(param.getName()).trim().equals("")){ parms.put( param.getName(), getParamValueObject( request, scalar)); } } task.close(); return parms; } /** * Get parameter value * @param request * @param parameterObj * @return * @throws Exception */ protected Object getParamValueObject( HttpServletRequest request, IScalarParameterDefn parameterObj ) throws Exception { String paramName = parameterObj.getName( ); String format = parameterObj.getDisplayFormat( ); if ( doesReportParameterExist( request, paramName ) ) { ReportParameterConverter converter = new ReportParameterConverter(format, request.getLocale( ) ); // Get value from http request String paramValue = getReportParameter( request, paramName, null ); return converter.parse( paramValue, parameterObj.getDataType( ) ); } return null; } public static String getReportParameter( HttpServletRequest request, String name, String defaultValue ) { assert request != null && name != null; String value = getParameter( request, name ); if ( value == null || value.length( ) <= 0 ) // Treat // it as blank value. { value = ""; //$NON-NLS-1$ } Map paramMap = request.getParameterMap( ); if ( paramMap == null || !paramMap.containsKey( name ) ) { value = defaultValue; } Set nullParams = getParameterValues( request, PARAM_ISNULL ); if ( nullParams != null && nullParams.contains( name ) ) { value = null; } return value; } /** * Check if report parameter exist * @param request * @param name * @return */ public static boolean doesReportParameterExist( HttpServletRequest request, String name ) { assert request != null && name != null; boolean isExist = false; Map paramMap = request.getParameterMap( ); if ( paramMap != null ) { isExist = ( paramMap.containsKey( name ) ); } Set nullParams = getParameterValues( request, PARAM_ISNULL ); if ( nullParams != null && nullParams.contains( name ) ) { isExist = true; } return isExist; } /** * Get paramter value from request object * @param request * @param parameterName * @return */ public static String getParameter( HttpServletRequest request, String parameterName ) { if ( request.getCharacterEncoding( ) == null ) { try { request.setCharacterEncoding( UTF_8_ENCODE ); } catch ( UnsupportedEncodingException e ) { } } return request.getParameter( parameterName ); } //allows setting parameter values to null using __isnull public static Set getParameterValues( HttpServletRequest request, String parameterName ) { Set<String> parameterValues = null; String[] parameterValuesArray = request.getParameterValues( parameterName ); if ( parameterValuesArray != null ) { parameterValues = new LinkedHashSet<String>( ); for ( int i = 0; i < parameterValuesArray.length; i++ ) { parameterValues.add( parameterValuesArray[i] ); } } return parameterValues; } /** * Setter for birtEngine * @param birtEngine */ public void setBirtEngine(IReportEngine birtEngine) { this.birtEngine = birtEngine; } }

0
投票

BirtIntegration.Controller

package BirtIntegration.Controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import BirtIntegration.BirtViewer.ReportProcessor; public class BirtReportController extends HttpServlet { //this is the single tone class. private ReportProcessor processor ; @Override public void init(){ processor = ReportProcessor.getReportProcessor(); processor.initilizeBirtEngine(); System.out.println("Engine Initilized!!"); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("processing report complete"); processor.processReport(request, response); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } @Override public void destroy(){ processor.shutDownBirtEngine(); } }

BirtIntegration.factory

package BirtIntegration.factory; import java.io.File; import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.core.framework.Platform; import org.eclipse.birt.report.engine.api.EngineConfig; import org.eclipse.birt.report.engine.api.IReportEngine; import org.eclipse.birt.report.engine.api.IReportEngineFactory; /** * *Factory class for the instance of the {@link IReportEngine report engine}. *Responsible for creating IReportEngine and also destroying the engine. * */ public class BirtEngineFactory { public boolean isSingleton(){ return true ; } private IReportEngine birtEngine ; private File _resolvedDirectory ; private java.util.logging.Level logLevel ; private static BirtEngineFactory birtEngineFactory; private BirtEngineFactory(){ } public static BirtEngineFactory getBirtEngineFactory(){ if(birtEngineFactory == null){ birtEngineFactory = new BirtEngineFactory(); } return birtEngineFactory; } /** * Destroy birt engine. * and shut down platform * * call this method while destroying your application context. */ public void destroy() { try{ birtEngine.destroy(); Platform.shutdown() ; System.out.println("Engine successfully destroyed and platform is shutdown!!"); }catch (Exception e) { e.printStackTrace(); } } /** * Set log level * @param ll */ public void setLogLevel( java.util.logging.Level ll){ this.logLevel = ll ; } /** * Setting log file. * if log directory is not present.It will be created * @param f */ public void setLogDirectory ( java.io.File f ){ //TODO: if puts wrong path please validate that here. if(!f.exists()){ f.mkdirs(); } this._resolvedDirectory = f; } /** * Factory method for birt engine. */ public IReportEngine getEngine(){ if(birtEngine !=null){ } EngineConfig config = getEngineConfig(); try { Platform.startup( config ); } catch ( BirtException e ) { e.printStackTrace(); } IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY ); IReportEngine be = factory.createReportEngine( config ); this.birtEngine = be ; return be ; } /** * Set engine configuration like logs and other things as per the need * @return */ public EngineConfig getEngineConfig(){ EngineConfig config = new EngineConfig(); //This line injects the Spring Context into the BIRT Context //Put what ever you want to put in Birt Context which will be avail thought out the life cycle of birt engine context //config.getAppContext().put("struts", springContext ); //config.setLogConfig( null != this._resolvedDirectory ? this._resolvedDirectory.getAbsolutePath() : null , this.logLevel); //please take care of how many log files are created and with how much size //below code some how not taking of it.Check javaDoc of EngineConfig //config.setLogMaxBackupIndex(5); //config.setLogRollingSize(5242880); //5mb return config; } public Class<?> getObjectType() { return IReportEngine.class; } }

0
投票

JSP / reports.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> <HTML> <HEAD> <TITLE>Reports</TITLE> <script type="text/javascript" src="/BirtDemo/js/jquery-1.7.1.js"></script> <script type="text/javascript" src="/BirtDemo/js/report.js"> </script> </HEAD> <BODY style="background-color: #F0F0F0;"> <div> <h3 align="center" style="color:#84A9CF">Birt Integration With Web Application Using Ajax</h3> <div style="float: left;width: 25%;"> <fieldset style="background-color: white;"> <legend > <b style="color:#84A9CF">Select Reports</b> </legend> <ul> <li> <a href="#" onclick="generateReport('First_Report.rptdesign')" >Hello World Report</a></li> <li> <a href="#" onclick="generateReport('books_report.rptdesign')">Books Details Report</a></li> </ul> </fieldset> </div> <fieldset style="background-color: white;"> <legend> <b style="color:#84A9CF">Report Details:</b> </legend> <div id="downloadOptions" align="right"> <div id="paginationDiv"></div> Dwonload Report as: <a href="#" onclick="downloadReport('pdf')" >pdf</a>, <a href="#" onclick="downloadReport('xls')" >xls</a>, <a href="#" onclick="downloadReport('doc')" >doc</a>, </div> <button onclick="getPageCount()">Page count</button> <div id="reportData" style="height: auto; background-color: white;float: left;min-width: 70%;text-align: center;" align="center"> <br> Reports will be loaded here when user selects report from left navigation. </div> </fieldset> </div> </BODY> </HTML>

JS / report.js

/** * This js contains two method * 1)generateReport(reportName) : Requesting to load the report content in div. * 2)downloadReport(format): Downloading the current report in given format. */ //this will hold the currently loaded report name. currentReportName=""; currentPageNumber =1; paginationFlag=false; /** * This method is responsible for loading the reports in the report div. * @param localReportName */ function generateReport(reportName) { // here relative url is given if relative url is not working try giving full url var reporturl ="/BirtDemo/loadReport?ReportName="+reportName+"&ReportFormat=html"+"&pageNumber="+currentPageNumber; $("#reportData").html("Loading...<br><img src='/BirtDemo/images/loading.gif' align='middle' >"); $('#reportData').load(reporturl ,function(response, status, xhr) { if (status == "error") { var msg = "Sorry but there was an error getting details ! "; $("#reportData").html(msg + xhr.status + " " + xhr.statusText); } }); currentReportName=reportName; //once you set pagination skip pagination next time if(currentReportName =="books_report.rptdesign" && paginationFlag==false){ setPagePagination(); paginationFlag=true; } } /** * Download report function * * @param format */ function downloadReport(format){ if(currentReportName==""){ alert("Please Select the report."); return; } //here relative url is given if relative url is not working try giving full url var reporturl ="/BirtDemo/loadReport?ReportName="+currentReportName+"&ReportFormat="+format; window.location.href = reporturl; } function setPagePagination(){ var reporturl ="/BirtDemo/getPageCount"; $.ajax({ type : 'GET',//GET Or POST url : reporturl, cache: false, //get fresh copy of details.html instead of cahced one success: function(response, textStatus, jqXHR){ alert("Total number pagination pages are :"+response); var pageCount = response; var paginationHtml=""; //create pagincation html for(var i=1;i<=pageCount;i++){ paginationHtml = paginationHtml +" <b><a href='#' >"+i+"</a></b>" +" |"; } $("#paginationDiv").html("pagination -->"+paginationHtml); $("#paginationDiv a").click(function(){ alert("---"+$(this).text()+"---"); currentPageNumber =$(this).text(); generateReport(currentReportName); }); } }); }

报告

© www.soinside.com 2019 - 2024. All rights reserved.