您的位置:首页 > 编程语言 > Java开发

struts2实现简单分页显示

2013-04-06 17:26 399 查看
在开发web程序时,从数据库中取出来的数据一般都要分页显示在页面上,分页显示的方法非常多,有人写自定义标签,用自己写的标签进行分页显示,我个人觉得这是一种比较好的方法。下面是我用Struts2做的一个分页显示实例,基本的思路是:把数据库表中的每一行数据封装成一个对象,用一个返回类型为List的方法返回这些对象,接着在Struts2的action里面定义一个List属性,用这个List来接收从数据库中查询出来并进行了封装的那些对象,然后通过Struts2的标签遍历List里的每个对象,并把这些对象里所包含的属性取出来展现在页面上。下面是具体的步骤:

所用工具:JDK1.6 + MyEclipse9.0 + Tomcat6.0 + MySQL5.0 + struts 2.2
1、新建一个web工程,导入struts2中相应的jar包和mysql数据驱动包。

2、编写web.xml文件,其代码如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0"

 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_3_0.xsd">

  <display-name></display-name> 

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

  <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 net.fygk.utils;

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;

import net.fygk.model.Student;

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://192.168.15.161:9736/page" ;

  private static final String USERNAME = "root" ;

  private static final String PASSWORD = "mysql" ;

  

  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 ;

   }

  

   //获取总的记录数

   public int getAllCount()

   {

    int return_size = 0;

    try

    {

     if (this.getConnection()!=null)

     {

      pstmt = this.getConnection().prepareStatement("select stu_id from student");

      rs = pstmt.executeQuery();

      while(rs.next())

      {

       return_size++;

      }

     }

    }catch(Exception e)

    {

     e.printStackTrace();

    }

    return return_size;

   }

  

   //计算总页数

   public int getAllPage(int pageSize,int allCount)

   {

    int allPage = 0;

    if(allCount==0||pageSize==0)

    {

     allPage = 1;

    }

    else

    {

     allPage = allCount/pageSize;

     if(allCount%pageSize!=0)

     {

      allPage = allPage+1;

     }

    }

    return allPage;

   }

   public static void main(String[] args) {

  System.out.println(new PageDAO().getAllCount());

 }

}

                 

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,其代码分别如下:

Index.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>

Show.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <base href="<%=basePath%>">

   

    <title>My JSP 'index.jsp' starting page</title>

   

 <meta http-equiv="pragma" content="no-cache">

 <meta http-equiv="cache-control" content="no-cache">

 <meta http-equiv="expires" content="0">   

 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

 <meta http-equiv="description" content="This is my page">

 <!--

 <link rel="stylesheet" type="text/css" href="styles.css">

 -->

  </head>

 

  <body>

    <table border="1">

     <tr>

      <td>学号</td>

      <td>姓名</td>

      <td>地址</td>

      <td>电话</td>

     </tr>

     <s:iterator var="student" value="studentList">

      <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 var="begin" value="show!getAllStudent">

      <s:param name="currentPage" value="1" />

     </s:url>

     

     <s:url var="pre_url" value="show!getAllStudent">

      <s:param name="currentPage" value="currentPage-1==0?1:currentPage-1" />

     </s:url>

     

     <s:url var="pre_nex" value="show!getAllStudent">

      <s:param name="currentPage" value="currentPage+1>allPage?allPage:currentPage+1" />

     </s:url>

     

     <s:url var="end" value="show!getAllStudent">

      <s:param name="currentPage" value="allPage" />

     </s:url>

  

     <s:a href="%{begin}">首页</s:a>

     <s:a href="%{pre_url}">上一页</s:a>

     <s:a href="%{pre_nex}">下一页</s:a>

      <s:a href="%{end}">最后页</s:a>

      

  </body>

</html>

error.jsp

<%@ 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>

    <!-- <constant name="struts.enable.DynamicMethodInvocation" value="false" />

    <constant name="struts.devMode" value="false" />

    <include file="example.xml"/> -->

   

     <package name="default" namespace="/" extends="struts-default">

        <action name="show" class="net.fygk.action.ShowAction">

           <result name="success">/show.jsp</result>

     <result name="error">/error.jsp</result>

        </action>

    </package>

    <!-- Add packages here -->

</struts>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: