SSH超实用分页实现(原创开源)!

2025-11-25 18:52:12
SSH的分页网上有不少的例子,有利用session的,有利用分页组件的。我几个师兄原来搞的SSH项目也有一个成熟的分页插件。 具体业务实现类中的...

SSH的分页网上有不少的例子,有利用session的,有利用分页组件的。我几个师兄原来搞的SSH项目也有一个成熟的分页插件。

具体业务实现类中的分页方法:

public

List get

*****

(

int

pageNO){ DetachedCriteria dc

=

DetachedCriteria.forClass(

****

.

class

); List list

=*****

Dao.getList(dc,pageNO,

15

);

int

a

=

0

;

if

(list.equals(

null

)){a

=

1

;}

return

list; }

public

PageBean getBean(

int

pageNO) {

*****

jg; DetachedCriteria dc

=

DetachedCriteria.forClass(

*****

.

class

); PageBean pb

=

collegeDao.getPageBean(dc,pageNO,

15

);

return

pb; }

然后是一个PageBean的工具类,负责创建分页属性和基本逻辑。

然后是页面的bean获取输出信息及分页属性。

我觉得单纯的拷贝,自己用的不是很顺手。于是自己也搞了一个,个人认为可以清晰的分层,实现这个分页。分层还是传统的SSH七层结构。

SSH结构思想参考我的另一篇随笔SSH思想之我见!

下面是分页思想,一个初始化方法和一个分页实现方法:

分页的util类:

package

com.sy.util;

import

java.util.List; @SuppressWarnings(

"

unchecked

"

)

public

class

Page {

private

int

pageSize;

private

int

totalPage;

private

int

rowCount;

private

int

currentPage;

private

int

prePage;

private

int

nextPage;

private

boolean

hasNextPage;

private

boolean

hasPreviousPage;

private

List list;

public

Page() {

this

.pageSize

=

10

; }

public

int

getPageSize() {

return

pageSize; }

public

void

setPageSize(

int

pageSize) {

this

.pageSize

=

pageSize; }

public

int

getTotalPage() {

return

totalPage; }

public

void

setTotalPage(

int

totalPage) {

this

.totalPage

=

totalPage; }

public

int

getRowCount() {

return

rowCount; }

public

void

setRowCount(

int

rowCount) {

this

.rowCount

=

rowCount; }

public

int

getCurrentPage() {

return

currentPage; }

public

void

setCurrentPage(

int

currentPage) {

this

.currentPage

=

currentPage; }

public

int

getPrePage() {

return

prePage; }

public

void

setPrePage(

int

prePage) {

this

.prePage

=

prePage; }

public

int

getNextPage() {

return

nextPage; }

public

void

setNextPage(

int

nextPage) {

this

.nextPage

=

nextPage; }

public

boolean

isHasNextPage() {

return

hasNextPage; }

public

void

setHasNextPage(

boolean

hasNextPage) {

this

.hasNextPage

=

hasNextPage; }

public

boolean

isHasPreviousPage() {

return

hasPreviousPage; }

public

void

setHasPreviousPage(

boolean

hasPreviousPage) {

this

.hasPreviousPage

=

hasPreviousPage; }

public

List getList() {

return

list; }

public

void

setList(List list) {

this

.list

=

list; } }

分页的数据库操作和逻辑判断我把他单独用一个PageDaoImpl来实现:

/*

* 施杨的分页daoimpl类 *

*/

package

com.sy.dao.impl;

import

java.sql.SQLException;

import

java.util.List;

import

org.hibernate.HibernateException;

import

org.hibernate.Query;

import

org.hibernate.Session;

import

org.springframework.orm.hibernate3.HibernateCallback;

import

org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import

com.sy.dao.BaseDao;

import

com.sy.util.Page; @SuppressWarnings(

"

unchecked

"

)

public

class

PageDaoImpl

extends

HibernateDaoSupport {

private

String hql;

public

Page page;

public

int

start;

public

BaseDao dao;

public

void

setDao(BaseDao dao) {

this

.dao

=

dao; }

public

void

init(

int

start,String tableName){

//

ͨ��init����ʵ����ij�ʼ��

page

=

new

Page();

this

.hql

=

"

from

"

+

tableName;

this

.start

=

start; setRowCount(); setTotalPage(); setCurrentPage(); setPrePage(); setNextPage(); setPreOrNextBoolean(); }

public

int

getRowCount(){ List list

=

dao.find(hql);

if

(list.isEmpty()){

return

0

; }

return

list.size(); }

public

Page getPage(){ List list

=

(List)getHibernateTemplate().execute(

new

HibernateCallback(){

public

Object doInHibernate(Session session)

throws

HibernateException, SQLException { Query query

=

session.createQuery(hql); query.setFirstResult(getStartIndex()); query.setMaxResults(page.getPageSize());

return

query.list(); } }); page.setList(list);

return

page; }

public

void

setPreOrNextBoolean() {

if

(page.getCurrentPage()

<=

1

) { page.setHasPreviousPage(

false

); }

else

{ page.setHasPreviousPage(

true

); }

if

(page.getCurrentPage()

>=

page.getTotalPage()) { page.setHasNextPage(

false

); }

else

{ page.setHasNextPage(

true

); } }

public

void

setCurrentPage() {

if

(start

<

1

) { page.setCurrentPage(

1

); }

if

(start

>

page.getTotalPage()) { page.setCurrentPage(page.getTotalPage()); } page.setCurrentPage(start); }

public

void

setPrePage() { page.setPrePage(page.getCurrentPage()

-

1

); }

public

void

setNextPage() { page.setNextPage(page.getCurrentPage()

+

1

); }

public

void

setTotalPage() {

int

rowCount

=

getRowCount();

int

pageSize

=

page.getPageSize();

if

(rowCount

>

pageSize) {

if

(rowCount

%

pageSize

==

0

) { page.setTotalPage(rowCount

/

pageSize); }

else

{ page.setTotalPage(

1

+

(rowCount

/

pageSize)); } }

else

{ page.setTotalPage(

1

); } }

public

void

setRowCount() { page.setRowCount(getRowCount()); }

public

int

getStartIndex() {

int

startIndex

=

0

;

if

(start

<

0

) { startIndex

=

0

; }

else

{

if

(start

>

page.getTotalPage()) { startIndex

=

page.getPageSize()

*

(page.getTotalPage()

-

1

); }

else

{ startIndex

=

page.getPageSize()

*

(start

-

1

); } }

return

startIndex; } }

然后是业务层接口,举例AdminService.java

//

管理员service层接口

package

com.sy.service;

import

java.util.List;

import

com.sy.util.Page;

import

com.sy.vo.Admin;

public

interface

AdminService

extends

BaseService{

//

分页初始化

public

void

init(

int

pno);

//

分页实现

public

Page getPage(); }

实现类AdminServiceImpl.java

//

管理员service层实现类

package

com.sy.service.impl;

import

java.util.List;

import

com.sy.dao.impl.AdminDaoImpl;

import

com.sy.dao.impl.PageDaoImpl;

import

com.sy.service.AdminService;

import

com.sy.util.Page;

import

com.sy.vo.Admin; @SuppressWarnings(

"

unchecked

"

)

public

class

AdminServiceImpl

extends

BaseServiceImpl

implements

AdminService { .

public

Page getPage() {

return

Pdao.getPage(); }

public

void

init(

int

pno) { String tableName

=

"

Admin

"

; Pdao.init(pno,tableName); } }

struts的action层AdminAction.java

//

管理员action实现类

package

com.sy.action;

import

java.util.List;

import

javax.servlet.http.HttpServletRequest;

import

javax.servlet.http.HttpServletResponse;

import

javax.servlet.http.HttpSession;

import

org.apache.struts.action.ActionForm;

import

org.apache.struts.action.ActionForward;

import

org.apache.struts.action.ActionMapping;

import

org.apache.struts.action.ActionMessage;

import

org.apache.struts.action.ActionMessages;

import

com.sy.form.AdminForm;

import

com.sy.form.LoginForm;

import

com.sy.service.AdminService;

import

com.sy.util.MD5;

import

com.sy.util.Page;

import

com.sy.vo.Admin; @SuppressWarnings(

"

unchecked

"

)

public

class

AdminAction

extends

BaseAction { .

//

查看管理员

public

ActionForward listAdmins(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { AdminService as

=

(AdminService)

super

.getBean(

"

AdminService

"

);

int

pno

=

(

new

Integer(request.getParameter(

"

pno

"

))).intValue(); as.init(pno); Page myPage

=

as.getPage(); List myList

=

as.getPage().getList(); request.setAttribute(

"

myPage

"

, myPage); request.setAttribute(

"

AdminList

"

, myList);

return

mapping.findForward(

"

show

"

); } }

结构清晰,也很实用。

页面lookAdmin.jsp

<%

@ page language

=

"

java

"

pageEncoding

=

"

UTF-8

"

%>

DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

>

<%

@ taglib uri

=

"

http://java.sun.com/jsp/jstl/core

"

prefix

=

"

c

"

%>

<%

@ taglib uri

=

"

http://struts.apache.org/tags-bean

"

prefix

=

"

bean

"

%>

<%

@ taglib uri

=

"

http://struts.apache.org/tags-html

"

prefix

=

"

html

"

%>

<%

@ taglib uri

=

"

http://struts.apache.org/tags-logic

"

prefix

=

"

logic

"

%>

<%

@ taglib uri

=

"

http://struts.apache.org/tags-tiles

"

prefix

=

"

tiles

"

%>

<

html

>

<

head

>

<

meta

http-equiv

="Content-Language"

content

="zh-cn"

>

<

meta

http-equiv

="Content-Type"

content

="text/html; charset=utf-8"

>

<

title

>

施杨SSH新闻发布

title

>

head

>

<

body

>

<

center

>

<

h3

>

查看管理员

h3

>

<

br

>

<

a

href

="./admin/addAdmin.jsp"

>

添加管理员

a

>

<

br

>

<

a

href

="./NewsPage2.do?pno=1"

>

查看新闻

a

>

<

br

>

<

table

border

="2"

width

="600"

>

<

tr

>

<

td

>

用户名

td

>

<

td

>

密码

td

>

<

td

>

操作

td

>

tr

>

<

c:forEach

items

="${requestScope['AdminList']}"

var

="admin"

>

<

tr

align

="center"

>

<

td

width

="20%"

height

="10"

><

c:out

value

="${admin.aname}"

/>

td

>

<

td

width

="20%"

height

="10"

><

c:out

value

="${admin.apassword}"

/>

td

>

<

td

>

<

a

href

="./editAdmin.do?aid=

/>

">修改

a

>

  

<

a

href

="./deleteAdmin.do?aid=

/>

" onclick="javascript:return confirm('您确定删除吗?')">删除

a

>

td

>

tr

>

c:forEach

>

table

>

<

table

align

="center"

width

="500"

>

<

tr

>

<

td

align

="center"

colspan

="10"

>

<

logic:present

name

="myPage"

>

<

html:link

page

="/AdminPage.do?pno=1"

>

首页

html:link

>

<

logic:equal

name

="myPage"

property

="hasPreviousPage"

value

="false"

>

上一页

logic:equal

>

<

logic:equal

name

="myPage"

property

="hasPreviousPage"

value

="true"

>

<

a

href

="./AdminPage.do?pno=

="prePage"

/>

">上一页

a

>

logic:equal

>

每页

<

bean:write

name

="myPage"

property

="pageSize"

/>

条记录 共

<

bean:write

name

="myPage"

property

="rowCount"

/>

条记录 当前第(

<

bean:write

name

="myPage"

property

="currentPage"

/>

/

<

bean:write

name

="myPage"

property

="totalPage"

/>

)页

<

logic:equal

name

="myPage"

property

="hasNextPage"

value

="false"

>

下一页

logic:equal

>

<

logic:equal

name

="myPage"

property

="hasNextPage"

value

="true"

>

<

a

href

="./AdminPage.do?pno=

="nextPage"

/>

">下一页

a

>

logic:equal

>

<

a

href

="./AdminPage.do?pno="

>

末页

a

>

logic:present

>

td

>

tr

>

table

>

center

>

body

>

html

>

本文转自施杨博客园博客,原文链接:http://www.cnblogs.com/shiyangxt/archive/2008/12/06/1349099.html,如需转载请自行联系原作者