实例:Struts2结合DisplayTag、DbUtils实现查询分页、导出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的代码如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<!-- struts2的核心控制器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter><!-- 在Struts2环境中,要使用这个过滤器来解决displaytag的一些问题 -->
<filter-name>ResponseOverrideFilter</filter-name>
<filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ResponseOverrideFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ResponseOverrideFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
4、然后需要在src文件夹下建立displaytag.properties文件,解决导出的问题,内容如下:
export.excel.class=org.displaytag.export.excel.ExcelHssfView
5、struts.xml文件如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<package name="default" extends="struts-default">
<action name="studentAction" class="com.qqhr.action.StudentAction">
<result name="success">/main.jsp</result>
</action>
</package>
</struts>
6、action类的代码如下所示:
package com.qqhr.action;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import com.qqhr.dao.StudentDao;
public class StudentAction extends ActionSupport
{
private List list;//由于写在action类里,所以不用存在request作用域里
public List getList()
{
return list;
}
public void setList(List list)
{
this.list = list;
}
@Override
public String execute() throws Exception
{
StudentDao dao = new StudentDao();
list = dao.getAllStudent();//从dao中取出
return SUCCESS;
}
}
7、dao层使用了DbUtils这个框架,可以从网上下载,将下载的jar包放到lib文件夹下,dao类如下所示:
package com.qqhr.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.List;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import com.qqhr.entity.Student;
public class StudentDao
{
public List<Student> getAllStudent()
{
Connection con = null;
try
{
String url = "jdbc:mysql://localhost:3306/qqhr?useUnicode=true&characterEncoding=UTF-8";
String driver = "com.mysql.jdbc.Driver";
String user = "root";
String pass = "123456";
DbUtils.loadDriver(driver);
con = DriverManager.getConnection(url,user,pass);
String sql = "select * from Student";
QueryRunner qr = new QueryRunner();
List<Student> list = qr.query(con,sql,new BeanListHandler(Student.class));
return list;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}
8、实体类要和数据库的结构相对应,entity类如下所示:
package com.qqhr.entity;
/**
* 对应数据库的实体类
* @author administrator
*
*/
public class Student
{
private Integer sId;
private String sNo;
private String sName;
private String sSex;
private String sAddress;
private String sClass;
public Integer getsId()
{
return sId;
}
public void setsId(Integer sId)
{
this.sId = sId;
}
public String getsNo()
{
return sNo;
}
public void setsNo(String sNo)
{
this.sNo = sNo;
}
public String getsName()
{
return sName;
}
public void setsName(String sName)
{
this.sName = sName;
}
public String getsSex()
{
return sSex;
}
public void setsSex(String sSex)
{
this.sSex = sSex;
}
public String getsAddress()
{
return sAddress;
}
public void setsAddress(String sAddress)
{
this.sAddress = sAddress;
}
public String getsClass()
{
return sClass;
}
public void setsClass(String sClass)
{
this.sClass = sClass;
}
}
9、数据库如下所示:
10、系统首页面index.jsp如下所示:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<h1 align="center" style="color:red">
本系统使用了Struts2+DisplayTag+DbUtils三个开源框架
</h1>
<h2><a href="<%=request.getContextPath()%>/studentAction.action" style="color:red">进入首页查询学生</a></h2>
</body>
</html>
11、在主页面中要使用displaytag需要引入标签库,d:table标签有个name属性,是action里查询的属性,由于action里的属性默认实在request作用域里的,所以这里写直接el表达式取出数据,注意要写上requestURI的属性,为分页时的请求路径,export
为是否导出,property的属性值要和数据库的里的一样,由于是使用了DbUtils的缘故,系统主页面main.jsp的代码如下所示:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="d" uri="http://displaytag.sf.net" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>本系统的首页面</title>
<style type="text/css" media="all">
@import url("css/maven-base.css");
@import url("css/maven-theme.css");
@import url("css/site.css");
@import url("css/screen.css");
</style>
<link rel="stylesheet" type="text/css" href="./css/print.css" media="print">
</head>
<body>
<h1 align="center" style="color:blue">本系统使用了Struts2+DisplayTag+DbUtils三个开源框架</h1>
<d:table name="${list}" pagesize="4" requestURI="studentAction.action" export="true">
<d:caption style="color:green;font-size:24px;">导出Excel</d:caption>
<d:column property="sId" title="学生的ID"/>
<d:column property="sNo" title="学生的学号"/>
<d:column property="sName" title="学生的姓名"/>
<d:column property="sSex" title="学生的性别"/>
<d:column property="sAddress" title="学生的地址"/>
<d:column property="sClass" title="学生的班级"/>
</d:table>
</body>
</html>
12、最终的效果如下所示:
感兴趣的可以上网找下资料,这个东西不错的。
分享到:
相关推荐
Struts2结合DisplayTag框架进行分页案例 有建表脚本 适合初学者
Struts2整合DisplayTag 实现分页技术
实现环境:struts2.2.1、dbutils1.3、jdk6、jboss5.1、displaytag1.2、mysql、eclipse3.5 以上环境内通过测试,具体用法请参考项目内readme.txt 注意: 1.数据读取方法请注意GoodsDAO.java,注意数据库连接。 2....
Struts2+displaytag+dbutil 可运行完整web工程 jdk1.6、1.7 tomcat6.0
Displaytag实现分页
DisplayTag是个很好的jsp标签,目前最新版本为1.2,支持了自定义分页,解决了之前版本每次查询都把全部数据查出的低效率做法。但是DisplayTag默认是通过url传参,以及分页导航不灵活给人们带来了不少麻烦。鉴于此...
本人亲自用jsp的方式开发的一个完整的增删改查的小系统,遵循MVC架构,并且实现了模糊查询和用displaytag进行了分页,对输入垃圾字符进行了过滤处理,包含完整的代码注释,并且自带了Mysql的数据库脚本,很适合新手...
displaytag1.1显示排序分页导出自动标签
DisplayTag分页及属性
一个jsp做的分页完整实例,包含增删改查,并且增加了分页实现,用到非常流行的分页插件displaytag,插件的配置代码当中有详细的备注说明,数据库为mysql
display tag 分页例子的源代码。 博文链接:https://zhou568xiao.iteye.com/blog/192366
displaytag 一个后台管理的分页组件,非常好用,代码量少
07java培训displaytag分页实例六
NULL 博文链接:https://wooden-baby.iteye.com/blog/494060
改装后的displayTag分页插件,解决中文问题,内置帮助文档和示例文件及jar包,比较好用,如果不满足你的需求请不要砸砖 补充: csdn附件不能修改,jsp+servlet分页时有bug,请注意查询所有的serlvet不支持带参数,即...
NULL 博文链接:https://zhouwenjun.iteye.com/blog/576868
该文档里面详细说明在我们使用displaytag标签的时候,在表格的页脚显示一个当前界面显示多少条的动态改变(这个是和[第1-10项 共19项] [首页/上页]1, 2[下页/尾页] [显示条数]显示在一行的),table会根据当前选择的数据...
displaytag分页模版资料非常详细 displaytag分页模版资料非常详细 displaytag分页模版资料非常详细
displaytag的数据库分页(也叫外部分页)说明,东西很全,内容详细。包括:displaytag的jar包,配置文件,SSH项目分页源码,分页说明文档(包括使用displaytag和未使用),数据库备份,readme文件。手把手教你实现,...