struts2實現分頁顯示




在開發web程序時,從數據庫中取出來的數據一般都要分頁顯示在頁面上,分頁顯示的方法非常多,有人寫自定義標籤,用自己寫的標籤進行分頁顯示,我個人覺得這是一種比較好的方法。下面是我用Struts2做的一個分頁顯示實例,基本的思路是:把數據庫表中的每一行數據封裝成一個對象,用一個返回類型爲List的方法返回這些對象,接着在Struts2的action裏面定義一個List屬性,用這個List來接收從數據庫中查詢出來並進行了封裝的那些對象,然後通過Struts2的標籤遍歷List裏的每個對象,並把這些對象裏所包含的屬性取出來展現在頁面上。下面是具體的步驟:

所用工具:JDK1.6 + MyEclipse6.0 + Tomcat6.0 + MySQL5.0 + struts 2.0.11

1、新建一個web工程,導入struts2中相應的jar包和mysql數據驅動包。

2、編寫web.xml文件,其代碼如下:
 
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 <filter>
  <filter-name>struts2</filter-name>
  <filter-class>
   org.apache.struts2.dispatcher.FilterDispatcher
  </filter-class>
 </filter>
 <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>
                 
3、建一個數據庫表,用於保存學員信息:

drop database if exists page;
create database page ;
use page;
create table student (
   stu_id integer auto_increment,
   stuName varchar(255) not null,
   address varchar(255) not null,
   stuPhone varchar(255)not null,
   primary key(stu_id)
);
insert into student(stuName,address,stuPhone) values('楊華林','長沙','13787825190');
insert into student(stuName,address,stuPhone) values('李明清','天津','13787525190');
insert into student(stuName,address,stuPhone) values('李小華','大連','13788451190');
insert into student(stuName,address,stuPhone) values('鄭小明','蘇州','13787052188');
insert into student(stuName,address,stuPhone) values('楊一新','西安','13787851190');
insert into student(stuName,address,stuPhone) values('王新任','廣州','13787056460');
insert into student(stuName,address,stuPhone) values('謝小華','深圳','13787075550');
insert into student(stuName,address,stuPhone) values('王建明','廈門','13788853690');
insert into student(stuName,address,stuPhone) values('秦一生','北京','13788689236');
insert into student(stuName,address,stuPhone) values('田翠林','杭州','13787655150');
insert into student(stuName,address,stuPhone) values('陳小明','廣州','13787623668');
4、編寫PageDAO類,該類用於從數據庫中取出所有的學員信息,把這些學員信息封裝成一個Student對象並將
   其放入List中。

package org.hnylj.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class PageDAO {
 private Connection conn ;
 private PreparedStatement pstmt ;
 private ResultSet rs ;
 private static final String DRIVER = "com.mysql.jdbc.Driver" ;
 private static final String URL = "jdbc:mysql://localhost:3306/page" ;
 private static final String USERNAME = "root" ;
 private static final String PASSWORD = "123" ;
 
 private Student student ;
 
 //數據庫連接
 public synchronized Connection getConnection () {
  try {
   Class.forName (DRIVER) ;
   conn = DriverManager.getConnection (URL,USERNAME,PASSWORD) ;
  } catch (ClassNotFoundException e) {
   e.printStackTrace () ;
   return null ;
  } catch (SQLException e) {
   e.printStackTrace () ;
   return null ;
  }
  return conn ;
 }
 
  //分頁查詢
  public List<Student> queryByPage (int pageSize, int pageNow) {
   List<Student> list = new ArrayList<Student> () ;
   try {
     if (this.getConnection()!=null && pageSize>0 && pageNow>0) {
      pstmt = this.getConnection().prepareStatement(
        "select * from student order by stu_id limit "+(pageNow*pageSize-pageSize)+","+pageSize
      );
      rs = pstmt.executeQuery () ;
     
      while (rs.next()) {
       student = new Student () ;
       student.setStu_id (rs.getInt(1)) ;
       student.setStuName (rs.getString(2)) ;
       student.setAddress (rs.getString(3)) ;
       student.setStuPhone (rs.getString(4)) ;
       list.add (student) ;
      }
     }
   } catch(SQLException e) {
    e.printStackTrace() ;
   }
   return list ;
  }
}
                 
5、由於要對數據庫中的學員信息進行封裝,所以需要編寫一個JavaBean,即Student類:

package org.hnylj.util;
public class Student {
 private int stu_id ;
 private String stuName ;
 private String address ;
 private String stuPhone ;
 
 public Student () {
 }
 
 public int getStu_id () {
  return stu_id ;
 }
 
 public void setStu_id (int stu_id) {
  this.stu_id = stu_id ;
 }
 
 public String getStuName () {
  return stuName ;
 }
 
 public void setStuName (String stuName) {
  this.stuName = stuName ;
 }
 
 public String getAddress () {
  return address ;
 }
 
 public void setAddress (String address) {
  this.address = address ;
 }
 
 public String getStuPhone () {
  return stuPhone ;
 }
 
 public void setStuPhone (String stuPhone) {
  this.stuPhone = stuPhone ;
 }
}
至此底層的代碼就寫好了。接下來我們需要編寫web層的代碼。

6、編寫web層的jsp文件,分別有index.jsp,show.jsp和error.jsp,其代碼分別如下:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <title>Struts2實現分頁顯示</title>
 </head>
 <body>
    <div align="center">
       <s:a href="show.action">進入查看學員列表</s:a>
    </div>
 </body>
</html>
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Struts2實現分頁顯示</title>
  </head>
  <body>
  <div align="center">
  <table border="1">
    <tr>
    <th>學號</th>
    <th>姓名</th>
    <th>地址</th>
    <th>電話</th>
    </tr>
 <s:iterator value="students">
    <tr>
       <td><s:property value="stu_id"/></td>
       <td><s:property value="stuName"/></td>
       <td><s:property value="address"/></td>
       <td><s:property value="stuPhone"/></td>
    </tr>
 </s:iterator>
  </table>
     <s:url id="url_pre" value="show.action">
         <s:param name="pageNow" value="pageNow-1"></s:param>
     </s:url>
     <s:url id="url_next" value="show.action">
         <s:param name="pageNow" value="pageNow+1"></s:param>
     </s:url> 
     <s:a href="%{url_pre}">上一頁</s:a>
    
     <s:iterator value="students" status="status">
        <s:url id="url" value="show.action">
            <s:param name="pageNow" value="pageNow"/>
        </s:url>
     </s:iterator>
     <s:a href="%{url_next}">下一頁</s:a>
  </div>
  </body>
</html>
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>發生錯誤</title>
  </head>
 
  <body>
      業務邏輯發生異常,請稍候再試。。。。。。
  </body>
</html>
7、編寫struts2的action來攔截用戶的請求:

 

package org.hnylj.web;
import java.util.List;
import org.hnylj.util.PageDAO;
import org.hnylj.util.Student;
import com.opensymphony.xwork2.ActionSupport;
public class ShowAction extends ActionSupport {
 
 private List<Student> students ;
 private int pageNow = 1 ; //初始化爲1,默認從第一頁開始顯示
    private int pageSize = 5 ; //每頁顯示5條記錄
   
 private PageDAO pageDAO = new PageDAO () ;
 
 public List<Student> getStudents() {
  return students;
 }
 public void setStudents(List<Student> students) {
  this.students = students;
 }
 
 public int getPageNow() {
  return pageNow;
 }
 public void setPageNow(int pageNow) {
  this.pageNow = pageNow;
 }
 public int getPageSize() {
  return pageSize;
 }
 public void setPageSize(int pageSize) {
  this.pageSize = pageSize;
 }
 public String execute() throws Exception {
  students = pageDAO.queryByPage(pageSize, pageNow) ;
  return SUCCESS ;
 }
}
8、配置struts.xml文件,即action和響應結果頁面之間的映射:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
 <package name="struts2" namespace="/" extends="struts-default">
  <action name="show" class="org.hnylj.web.ShowAction">
   <result name="success">show.jsp</result>
   <result name="error">error.jsp</result>
  </action>
 </package>
</struts>
至此所有的工作已經完成,接下來部署整個web工程到tomcat的webapps目錄下,啓動tomcat,在瀏覽器地址欄輸入http://localhost:8080/項目名稱/index.jsp,回車即可看到一個鏈接,點擊該鏈接即可看到一個可以進行上一頁和下一頁的學員信息列表。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章