Struts2结合DisplayTag、DbUtils实现查询分页、导出Excel

来源:互联网 发布:大数据分析挖掘需求 编辑:程序博客网 时间:2024/04/30 09:44

实例:Struts2结合DisplayTagDbUtils实现查询分页、导出Excel(转)

    这几天在看书的时候,发现了一个好东西,一个开源的jsp自定义标签库,可以实现分页显示,导出为excel或其他的格式,简单的学习了,还真的是很有用,对于不想写html表格代码的,带样式的、带分页的,使用这个我感觉已经戳戳有余了。有些功能已经提供了,但是由于是结合了Struts2,所以有些东西是需要设置的。同时项目中使用了DbUtils这个框架。Displaytag的内部已经内置了poi,如果使用我们自己的POI可能会出现错误,所以就不用管了。

Struts2使用的是2.3.4这个版本。

DbUtils的下载地址:

http://commons.apache.org/proper/commons-dbutils/

DisplayTag的下载地址:

http://sourceforge.net/projects/displaytag/files/display%20tag%20library/1.2/

下载的是1.2的版本。解压安装目录中的displaytag-examples-1.2.war文件,将目录中的前四个文件夹复制到项目的下面,并将WEB-INF下的lib下的所有的jar包放到项目的下面,如图所示:


2、将项目配置成struts2的开发环境,编写对应的实体类、控制器类、数据库访问类,最终的项目结构如下所示:

3、由于使用了struts2,所以需要配置一个displaytag提供的过滤器,解决一些乱码还有其他的问题,web.xml的代码如下所示:

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.   <display-name></display-name>   
  8.     
  9.     <!-- struts2的核心控制器 -->  
  10.     <filter>  
  11.         <filter-name>struts2</filter-name>  
  12.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  13.     </filter>  
  14.     <filter-mapping>  
  15.         <filter-name>struts2</filter-name>  
  16.         <url-pattern>/*</url-pattern>  
  17.     </filter-mapping>  
  18.     <filter><!-- 在Struts2环境中,要使用这个过滤器来解决displaytag的一些问题 -->  
  19.         <filter-name>ResponseOverrideFilter</filter-name>  
  20.         <filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>  
  21.     </filter>  
  22.     <filter-mapping>  
  23.         <filter-name>ResponseOverrideFilter</filter-name>  
  24.         <url-pattern>*.action</url-pattern>  
  25.     </filter-mapping>  
  26.     <filter-mapping>  
  27.         <filter-name>ResponseOverrideFilter</filter-name>  
  28.         <url-pattern>*.jsp</url-pattern>  
  29.     </filter-mapping>  
  30.   <welcome-file-list>  
  31.     <welcome-file>index.jsp</welcome-file>  
  32.   </welcome-file-list>  
  33. </web-app>  

4、然后需要在src文件夹下建立displaytag.properties文件,解决导出的问题,内容如下:

[plain] view plaincopyprint?
  1. export.excel.class=org.displaytag.export.excel.ExcelHssfView  

5struts.xml文件如下所示:

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.3.dtd">  
  5. <struts>  
  6.     <constant name="struts.enable.DynamicMethodInvocation" value="true" />  
  7.     <constant name="struts.devMode" value="true" />  
  8.     <package name="default"  extends="struts-default">  
  9.         <action name="studentAction" class="com.qqhr.action.StudentAction">  
  10.             <result name="success">/main.jsp</result>  
  11.         </action>  
  12.     </package>  
  13. </struts>  


6action类的代码如下所示:

[java] view plaincopyprint?
  1. package com.qqhr.action;  
  2.   
  3. import java.util.List;  
  4. import com.opensymphony.xwork2.ActionSupport;  
  5. import com.qqhr.dao.StudentDao;  
  6.   
  7. public class StudentAction extends ActionSupport  
  8. {  
  9.     private List list;//由于写在action类里,所以不用存在request作用域里  
  10.     public List getList()  
  11.     {  
  12.         return list;  
  13.     }  
  14.   
  15.     public void setList(List list)  
  16.     {  
  17.         this.list = list;  
  18.     }  
  19.       
  20.     @Override  
  21.     public String execute() throws Exception  
  22.     {  
  23.         StudentDao dao = new StudentDao();  
  24.         list = dao.getAllStudent();//从dao中取出  
  25.         return SUCCESS;  
  26.     }  
  27. }  

7dao层使用了DbUtils这个框架,可以从网上下载,将下载的jar包放到lib文件夹下,dao类如下所示:

[java] view plaincopyprint?
  1. package com.qqhr.dao;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.util.List;  
  6.   
  7. import org.apache.commons.dbutils.DbUtils;  
  8. import org.apache.commons.dbutils.QueryRunner;  
  9. import org.apache.commons.dbutils.handlers.BeanListHandler;  
  10.   
  11. import com.qqhr.entity.Student;  
  12.   
  13. public class StudentDao  
  14. {  
  15.     public List<Student> getAllStudent()  
  16.     {  
  17.         Connection con = null;  
  18.         try  
  19.         {  
  20.             String url = "jdbc:mysql://localhost:3306/qqhr?useUnicode=true&characterEncoding=UTF-8";  
  21.             String driver = "com.mysql.jdbc.Driver";  
  22.             String user = "root";  
  23.             String pass = "123456";  
  24.             DbUtils.loadDriver(driver);  
  25.             con = DriverManager.getConnection(url,user,pass);  
  26.             String sql = "select * from Student";  
  27.             QueryRunner qr = new QueryRunner();  
  28.             List<Student> list = qr.query(con,sql,new BeanListHandler(Student.class));  
  29.             return list;  
  30.         }  
  31.         catch (Exception e)  
  32.         {  
  33.             e.printStackTrace();  
  34.         }  
  35.         return null;  
  36.     }  
  37. }  

8、实体类要和数据库的结构相对应,entity类如下所示:

[java] view plaincopyprint?
  1. package com.qqhr.entity;  
  2.   
  3. /** 
  4.  * 对应数据库的实体类 
  5.  * @author administrator 
  6.  * 
  7.  */  
  8. public class Student  
  9. {  
  10.     private Integer sId;  
  11.     private String sNo;  
  12.     private String sName;  
  13.     private String sSex;  
  14.     private String sAddress;  
  15.     private String sClass;  
  16.     public Integer getsId()  
  17.     {  
  18.         return sId;  
  19.     }  
  20.     public void setsId(Integer sId)  
  21.     {  
  22.         this.sId = sId;  
  23.     }  
  24.     public String getsNo()  
  25.     {  
  26.         return sNo;  
  27.     }  
  28.     public void setsNo(String sNo)  
  29.     {  
  30.         this.sNo = sNo;  
  31.     }  
  32.     public String getsName()  
  33.     {  
  34.         return sName;  
  35.     }  
  36.     public void setsName(String sName)  
  37.     {  
  38.         this.sName = sName;  
  39.     }  
  40.     public String getsSex()  
  41.     {  
  42.         return sSex;  
  43.     }  
  44.     public void setsSex(String sSex)  
  45.     {  
  46.         this.sSex = sSex;  
  47.     }  
  48.     public String getsAddress()  
  49.     {  
  50.         return sAddress;  
  51.     }  
  52.     public void setsAddress(String sAddress)  
  53.     {  
  54.         this.sAddress = sAddress;  
  55.     }  
  56.     public String getsClass()  
  57.     {  
  58.         return sClass;  
  59.     }  
  60.     public void setsClass(String sClass)  
  61.     {  
  62.         this.sClass = sClass;  
  63.     }  
  64.       
  65. }  

9、数据库如下所示:

10、系统首页面index.jsp如下所示:

[html] view plaincopyprint?
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  3. <html>  
  4.   <head>  
  5.     <title>My JSP 'index.jsp' starting page</title>  
  6.   </head>  
  7.   <body>  
  8.     <h1 align="center" style="color:red">  
  9.         本系统使用了Struts2+DisplayTag+DbUtils三个开源框架  
  10.     </h1>  
  11.     <h2><a href="<%=request.getContextPath()%>/studentAction.action" style="color:red">进入首页查询学生</a></h2>  
  12.   </body>  
  13. </html>  


11、在主页面中要使用displaytag需要引入标签库,d:table标签有个name属性,是action里查询的属性,由于action里的属性默认实在request作用域里的,所以这里写直接el表达式取出数据,注意要写上requestURI的属性,为分页时的请求路径,export 为是否导出,property的属性值要和数据库的里的一样,由于是使用了DbUtils的缘故,系统主页面main.jsp的代码如下所示:

[html] view plaincopyprint?
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="d" uri="http://displaytag.sf.net" %>  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.     <title>本系统的首页面</title>  
  7.     <style type="text/css" media="all">  
  8.         @import url("css/maven-base.css");  
  9.         @import url("css/maven-theme.css");  
  10.         @import url("css/site.css");  
  11.         @import url("css/screen.css");  
  12.     </style>  
  13.     <link rel="stylesheet" type="text/css" href="./css/print.css" media="print">  
  14.   </head>  
  15.   <body>  
  16.     <h1 align="center" style="color:blue">本系统使用了Struts2+DisplayTag+DbUtils三个开源框架</h1>  
  17.     <d:table name="${list}"  pagesize="4" requestURI="studentAction.action" export="true">  
  18.         <d:caption style="color:green;font-size:24px;">导出Excel</d:caption>  
  19.         <d:column property="sId" title="学生的ID"/>  
  20.         <d:column property="sNo" title="学生的学号"/>  
  21.         <d:column property="sName" title="学生的姓名"/>  
  22.         <d:column property="sSex" title="学生的性别"/>  
  23.         <d:column property="sAddress" title="学生的地址"/>  
  24.         <d:column property="sClass" title="学生的班级"/>  
  25.     </d:table>  
  26.   </body>  
  27. </html>  

12、最终的效果如下所示:

感兴趣的可以上网找下资料,这个东西不错的。

原创粉丝点击