spring mvc整合ireport

来源:互联网 发布:七天网络www7netcc查分 编辑:程序博客网 时间:2024/05/29 03:07

整合过程

1.    两种实现方式servlet 和整合实现

Servlet 需要在web.xml中增加 

<servlet> 

   <servlet-name>JRPDFServlet</servlet-name> 

   <servlet-class>framework.servlet.JRPDFServlet</servlet-class> 

 </servlet> 

<servlet-mapping> 

   <servlet-name>JRPDFServlet</servlet-name> 

   <url-pattern>/a/servlet/JRPDFServlet</url-pattern> 

  </servlet-mapping>

编写JRPDFServlet实现类

packageframework.servlet;

 

importjava.io.File;

importjava.io.IOException;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.util.Enumeration;

importjava.util.HashMap;

 

importjavax.servlet.ServletContext;

importjavax.servlet.ServletException;

importjavax.servlet.ServletOutputStream;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

 

importnet.sf.jasperreports.engine.JRException;

importnet.sf.jasperreports.engine.JasperRunManager;

 

importcom.thinkgem.jeesite.common.config.Global;

 

publicclass JRPDFServlet extends HttpServlet

{

    private static final long serialVersionUID= 1L;

 

    public void service(HttpServletRequestrequest, HttpServletResponse response)

            throws ServletException,IOException

    {

//          Connection connection =getConnection(ConnectionList.mainConnection);

    Stringurl= Global.getConfig("jdbc.url");

    Stringusername= Global.getConfig("jdbc.username");

    Stringpassword= Global.getConfig("jdbc.password");

    Stringdriver =Global.getConfig("jdbc.driver");

        Connection connection =getConnection(driver, url, username, password);

        try

        {

            //据据jasper文件生成JasperPrint对象

            ServletContext context =this.getServletConfig().getServletContext();

            String fileName =request.getParameter("fileName");//ireport编译文件:*.jasper(由模板文件*.jrxml文件编译生成)

            File reportFile = newFile(context.getRealPath("/WEB-INF/jaspers/"+fileName));

            if (reportFile.exists()) {

            HashMap<String, Object>parameters = new HashMap<String, Object>();//给报表模板文件传参

    //得到枚举类型的参数名称,参数名称若有重复的只能得到第一个--获取页面传来的参数,和模板中文件的sql参数名称一一对应

            Enumeration<?> temp =request.getParameterNames();

               while (temp.hasMoreElements())

               {

                String paramName = (String)temp.nextElement();

                String paramValue =request.getParameter(paramName);

               if("begintime".equals(paramName)){

                if("".equals(paramValue) || paramValue== null){

                        paramValue="2017-01-01";

                }

                }

               if("endtime".equals(paramName)){

                if("".equals(paramValue) || paramValue== null){

                        paramValue="2035-12-29";

                 }

                }

                parameters.put(paramName,paramValue);

               }

               byte[] buffer = new byte[1024];

             

               buffer =JasperRunManager.runReportToPdf(reportFile.getPath(), parameters,connection);

                        response.setContentType("application/pdf");

                        response.setContentLength(buffer.length);

                         

                        ServletOutputStream outStream =response.getOutputStream();

                        outStream.write(buffer,0,buffer.length);

                        outStream.flush();

                        outStream.close();

                        buffer =null;

            }

        } catch (JRException e)

        {

            e.printStackTrace();

        }      

    }

 

    public Connection getConnection(Stringdriver, String url, String user, String password){

      

      Connection conn = null ;        

      try{

       Class.forName(driver) ;

       conn = DriverManager.getConnection(url,user, password) ;

       

       return conn ;

       

      }catch(Exception e){

       e.printStackTrace();

      }

      

      return null ;

     }

}

引入jar包 必不可少

 

SpringMvc JasperReport整合

1、 继承JasperReportsMultiFormatView类,并重写fillReport()方法,在该方法中增加setUrl()实现,这样就可以在controller中指定要使用的报表模板文件了。这样做的好处是,只需要一个jasperReport配置文件,可以在controller中动态的设定报表模板url。见

2、 /WEB-INF/jasper/目录下创建报表视图配置文件jasper-defs.xml,并指定解析器类为自定义的视图解析器类,见

3、 Jasper报表的渲染需要用到XmlViewResolver视图解析器,这样你的项目中就会存在多个视图解析器。需要注意的是,项目中如果使用了多个视图解析器,则需要设置order的值来区分解析器的使用顺序,order值越小则越靠前。增加XmlViewResolver视图解析器的同时,并指定其要解析的配置文件路径。springmvc配置文件中添加

<beanid="jasperReportResolver"class="org.springframework.web.servlet.view.XmlViewResolver"> 

   <propertyname="order"value="0"/> 

   <propertyname="location"value="WEB-INF/jaspers/jasper-defs.xml"/> 

</bean> 

 

4、 接下来进行controller的处理

/**

 *

 * @parammodel

 *@return

 */ 

@RequiresPermissions("report:trend:view")

@RequestMapping(value = "/report",method = RequestMethod.GET) 

public String report(Model model,SaferRecordQuerysaferRecordQuery,HttpServletRequest request, HttpServletResponse response) {

        //通过连接数据库获取数据

List<SaferRecord> saferList =logglService.getSaferList(saferRecordQuery);

    // 报表数据源 

   JRDataSource jrDataSource = new JRBeanCollectionDataSource(saferList); 

    // 动态指定报表模板url 

   model.addAttribute("url","/WEB-INF/jaspers/report2.jasper"); 

   model.addAttribute("format", "pdf"); // 报表格式 

   model.addAttribute("jrMainDataSource", jrDataSource);    

   return "iReportView"; // 对应jasper-defs.xml中的bean id 

页面

<scripttype="text/javascript">

       

        function getSearch() {

        debugger;

        var begintime = $("#begintime").val();

        var endtime = $("#endtime").val();

            var path = "report/trend/report?fileName=report2.jasper&begintime="+begintime+"&endtime="+endtime;

                 }

</script>

 

<%@ page contentType="text/html;charset=UTF-8"%>

<%--<%@ includefile="/WEB-INF/views/include/taglib.jsp"%>--%>

<html>

<head>

 

    <title>整改通知管理</title>

        <scripttype="text/javascript">

               functiongetSearch() {

             var path = "a/servlet/JRPDFServlet?fileName=report2.jasper";

            document.getElementById("reportFrame").setAttribute("src", path);

    }

    </script>

</head>

<body>

    <%--ireport引入 --%>

    <li class="btns"><inputid="btnSubmit" class="btn btn-primary"type="button" value="查询" onclick="getSearch()"/></li>

   <iframeid="reportFrame"width="800px"height="600px"frameborder="no"border="0"marginwidth="0"marginheight="0"scrolling="no"allowtransparency="yes"></iframe>

</body>

</html>

 相关jar包的url http://download.csdn.net/download/zhanglixin_1984/10127296

原创粉丝点击