`
jishublog
  • 浏览: 870182 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

实例: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的代码如下所示:

<?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

5struts.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>


6action类的代码如下所示:

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;
	}
}

7dao层使用了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、最终的效果如下所示:

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics