- 浏览: 40084 次
- 性别:
- 来自: 厦门
最新评论
<script type="text/javascript">
new Draggable("related_topics");
</script>今天看到某人写的分页类,结果发现批人家的人不少,没有必要,好的东西吸收学习,感觉不实用可以不用,何必发帖子挖苦人家。我前段时间也自己设计了一个分页的方法,绝对是自己想到的,如果网上有一样的,说明大家都思考了,有可取度,提供给大家参考。
首先写了一个分页的类,其实只有主要属性的setter和getter方法
/**
* 分页类
* @author qinglin876
*
*/
public class Pagination {
private int start;
//一次取得的数量
private int size;
//要取得页数
private int currentPage = 1;
//总的记录页数
private int totalPage = 0;
//总的记录条数
private int totalRecord;
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
public Pagination(){
}
public Pagination(int size){
this.size = size;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
}
另外pagination.jsp由pagination类填充
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<SCRIPT type="text/javascript">
function trim(str){
return str.replace(/(^\s*)|(\s*$)/g, "");
}
function selectPage(input){
var value = trim(input.value);
if(value == ""){
return;
}
if(/\d+/.test(value)){
input.form.submit();
return;
}
alert("请输入正确的页数");
input.focus();
}
</SCRIPT>
<div class="pagech">
<s:if test="pagination.totalPage != 0">
<s:url action="%{#request.url}" id="first">
<s:param name="pagination.currentPage" value="1"></s:param>
</s:url>
<s:url action="%{#request.url}" id="next" >
<s:param name="pagination.currentPage"
value="pagination.currentPage+1">
</s:param>
</s:url>
<s:url action="%{#request.url}" id="prior" >
<s:param name="pagination.currentPage"
value="pagination.currentPage-1"></s:param>
</s:url>
<s:url action="%{#request.url}" id="last">
<s:param name="pagination.currentPage" value="pagination.totalPage"></s:param>
</s:url>
<s:if test="pagination.currentPage == 1">
<span class="current">首页</span>
<span class="current">上一页</span>
</s:if>
<s:else>
<s:a href="%{first}">首页</s:a>
<s:a href="%{prior}">上一页</s:a>
</s:else>
<s:if
test="pagination.currentPage == pagination.totalPage || pagination.totalPage == 0">
<span class="current">下一页</span>
<span class="current">末页</span>
</s:if>
<s:else>
<s:a href="%{next}">下一页</s:a>
<s:a href="%{last}">末页</s:a>
</s:else>
<span class="jumplabel">跳转到</span>
<s:form action="%{#request.url}" theme="simple"
cssStyle="display:inline">
<s:hidden name="pagination.totalPage" value="%{pagination.totalPage}"></s:hidden>
<input type="text" name="pagination.currentPage" size="2"
onblur="selectPage(this)" />
</s:form>
<span class="jumplabel">页</span>
<span class="jumplabel">共<s:property
value="pagination.totalRecord" />条</span>
<span class="jumplabel">当前是第<s:property
value="pagination.currentPage" />/<s:property value="pagination.totalPage"/>页</span>
</s:if>
</div>
用的时候,在页面include进去,注意上面的"%{#request.url}",即是在struts2的action里面有一个setter和getter方法,下面看action中的某个方法
public String showNotices() throws Exception{
if(tip != null){
tip = new String(tip.getBytes("iso8859-1"),"utf-8");
}
if(notices == null)
this.notices = new ArrayList<Notice>();
int size = Integer.valueOf(this.getText("per_page_notice_size"));
if (pagination == null) {
pagination = new Pagination(size);
}
pagination.setSize(size);
if (pagination.getCurrentPage() <= 0) {
pagination.setCurrentPage(1);
}
if (pagination.getTotalPage() != 0
&& pagination.getCurrentPage() > pagination.getTotalPage()) {
pagination.setCurrentPage(pagination.getTotalPage());
}
url = "goto_showNotices.action"; this.notices.addAll(this.noticeDAO.showAll(pagination));
if(this.notices.size() == 0 && pagination.getCurrentPage() != 1){
pagination.setCurrentPage(pagination.getCurrentPage()-1);
this.notices.addAll(this.noticeDAO.showAll(pagination));
}
return "success";
}
在上面的this.noticeDAO.showAll(pagination))中填充pagination,具体如下
/*
* 显示所有的通告
* @see com.qinglin.dao.NoticeDAO#showAll(com.qinglin.util.Pagination)
*/
@SuppressWarnings("unchecked")
public List<Notice> showAll(final Pagination pagination) {
String hql = "from Notice as n";
this.getHibernateTemplate().setCacheQueries(true);
int totalRecord = ((Long) this.getSession().createQuery(
"select count(*) " + hql).uniqueResult()).intValue();
int totalPage = totalRecord % pagination.getSize() == 0 ? totalRecord
/ pagination.getSize() : totalRecord / pagination.getSize() + 1;
pagination.setTotalRecord(totalRecord);
pagination.setTotalPage(totalPage);
hql += " order by n.add_date desc";
final String hql1 = hql;
return (List<Notice>) this.getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql1);
query.setFirstResult((pagination.getCurrentPage() - 1)
* pagination.getSize());
query.setMaxResults(pagination.getSize());
return query.list();
}
});
}
基本上就这些,当然请求的action里面需要设置pagination的setter和getter方法
这个分页方法特点是简单,只需在action中指明请求的url,用某种方法填充pagination,在显示的页面包含pagination.jsp即可。
package com.shop.bean;
import java.util.List;
public class PageView <T> {
private int currentPage = 1;
private long totalPage = 1;
private long totalRecord = 1;
private List <T> records;
private int firstIndex = 1;
private PageIndex pageIndex;
private int maxResult = 12;
public PageView(int currentPage, int maxResult) {
this.currentPage = currentPage;
this.maxResult = maxResult;
this.firstIndex = currentPage * maxResult;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public void setQueryResult(QueryResult <T> qr){
setTotalRecord(qr.getTotal());
setRecords(qr.getDatas());
}
public long getTotalPage() {
return totalPage;
}
public void setTotalPage(long totalPage) {
this.totalPage = totalPage;
this.pageIndex = WebTool.getPageIndex(this.maxResult, this.currentPage, this.totalPage);
}
public long getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(long totalRecord) {
this.totalRecord = totalRecord;
setTotalPage(totalRecord / this.maxResult == 0 ? totalRecord / this.maxResult : totalRecord / this.maxResult + 1);
}
public List <T> getRecords() {
return records;
}
public void setRecords(List <T> records) {
this.records = records;
}
public int getFirstIndex() {
return firstIndex;
}
public PageIndex getPageIndex() {
return pageIndex;
}
public void setPageIndex(PageIndex pageIndex) {
this.pageIndex = pageIndex;
}
public int getMaxResult() {
return maxResult;
}
public void setMaxResult(int maxResult) {
this.maxResult = maxResult;
}
public void setFirstIndex(int firstIndex) {
this.firstIndex = firstIndex;
}
}
画面的代码:
<s:iterator value="#request.pageView.pageIndex.pageList">
<s:if test="#request.pageView.currentPage == 4"> <b> <font color="#FFFFFF">第 <s:property/>页 </font> </b> </s:if>
<s:if test="#request.pageView.currentPage != 4"> <a href="javascript:topage( <s:property/>)" class="a03">第 <s:property/>页 </a> </s:if>
</s:iterator>
action中的代码:
Map <String, Object> request = (Map <String, Object>)ActionContext.getContext().get("request");
request.put("pageView", pageView);
<s:iterator value="#request.pageView.pageIndex.pageList">中="#request.pageView.pageIndex.pageList值能正常获取,可是 <s:if test="#request.pageView.currentPage == 4"> 中的="#request.pageView.currentPage值获取不到正确的值,这是什么原因啊?
问题补充:
<s:iterator value="#request.pageView.pageIndex.pageList">
<s:if test="{#request.pageView.currentPage == 4}"><b><font color="#FFFFFF">第<s:property/>页</font></b></s:if>
<s:if test="{#request.pageView.currentPage != 4}"><a href="javascript:topage(<s:property/>)" class="a03">第<s:property/>页</a></s:if>
</s:iterator>
首先写了一个分页的类,其实只有主要属性的setter和getter方法
/**
* 分页类
* @author qinglin876
*
*/
public class Pagination {
private int start;
//一次取得的数量
private int size;
//要取得页数
private int currentPage = 1;
//总的记录页数
private int totalPage = 0;
//总的记录条数
private int totalRecord;
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
public Pagination(){
}
public Pagination(int size){
this.size = size;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
}
另外pagination.jsp由pagination类填充
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<SCRIPT type="text/javascript">
function trim(str){
return str.replace(/(^\s*)|(\s*$)/g, "");
}
function selectPage(input){
var value = trim(input.value);
if(value == ""){
return;
}
if(/\d+/.test(value)){
input.form.submit();
return;
}
alert("请输入正确的页数");
input.focus();
}
</SCRIPT>
<div class="pagech">
<s:if test="pagination.totalPage != 0">
<s:url action="%{#request.url}" id="first">
<s:param name="pagination.currentPage" value="1"></s:param>
</s:url>
<s:url action="%{#request.url}" id="next" >
<s:param name="pagination.currentPage"
value="pagination.currentPage+1">
</s:param>
</s:url>
<s:url action="%{#request.url}" id="prior" >
<s:param name="pagination.currentPage"
value="pagination.currentPage-1"></s:param>
</s:url>
<s:url action="%{#request.url}" id="last">
<s:param name="pagination.currentPage" value="pagination.totalPage"></s:param>
</s:url>
<s:if test="pagination.currentPage == 1">
<span class="current">首页</span>
<span class="current">上一页</span>
</s:if>
<s:else>
<s:a href="%{first}">首页</s:a>
<s:a href="%{prior}">上一页</s:a>
</s:else>
<s:if
test="pagination.currentPage == pagination.totalPage || pagination.totalPage == 0">
<span class="current">下一页</span>
<span class="current">末页</span>
</s:if>
<s:else>
<s:a href="%{next}">下一页</s:a>
<s:a href="%{last}">末页</s:a>
</s:else>
<span class="jumplabel">跳转到</span>
<s:form action="%{#request.url}" theme="simple"
cssStyle="display:inline">
<s:hidden name="pagination.totalPage" value="%{pagination.totalPage}"></s:hidden>
<input type="text" name="pagination.currentPage" size="2"
onblur="selectPage(this)" />
</s:form>
<span class="jumplabel">页</span>
<span class="jumplabel">共<s:property
value="pagination.totalRecord" />条</span>
<span class="jumplabel">当前是第<s:property
value="pagination.currentPage" />/<s:property value="pagination.totalPage"/>页</span>
</s:if>
</div>
用的时候,在页面include进去,注意上面的"%{#request.url}",即是在struts2的action里面有一个setter和getter方法,下面看action中的某个方法
public String showNotices() throws Exception{
if(tip != null){
tip = new String(tip.getBytes("iso8859-1"),"utf-8");
}
if(notices == null)
this.notices = new ArrayList<Notice>();
int size = Integer.valueOf(this.getText("per_page_notice_size"));
if (pagination == null) {
pagination = new Pagination(size);
}
pagination.setSize(size);
if (pagination.getCurrentPage() <= 0) {
pagination.setCurrentPage(1);
}
if (pagination.getTotalPage() != 0
&& pagination.getCurrentPage() > pagination.getTotalPage()) {
pagination.setCurrentPage(pagination.getTotalPage());
}
url = "goto_showNotices.action"; this.notices.addAll(this.noticeDAO.showAll(pagination));
if(this.notices.size() == 0 && pagination.getCurrentPage() != 1){
pagination.setCurrentPage(pagination.getCurrentPage()-1);
this.notices.addAll(this.noticeDAO.showAll(pagination));
}
return "success";
}
在上面的this.noticeDAO.showAll(pagination))中填充pagination,具体如下
/*
* 显示所有的通告
* @see com.qinglin.dao.NoticeDAO#showAll(com.qinglin.util.Pagination)
*/
@SuppressWarnings("unchecked")
public List<Notice> showAll(final Pagination pagination) {
String hql = "from Notice as n";
this.getHibernateTemplate().setCacheQueries(true);
int totalRecord = ((Long) this.getSession().createQuery(
"select count(*) " + hql).uniqueResult()).intValue();
int totalPage = totalRecord % pagination.getSize() == 0 ? totalRecord
/ pagination.getSize() : totalRecord / pagination.getSize() + 1;
pagination.setTotalRecord(totalRecord);
pagination.setTotalPage(totalPage);
hql += " order by n.add_date desc";
final String hql1 = hql;
return (List<Notice>) this.getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql1);
query.setFirstResult((pagination.getCurrentPage() - 1)
* pagination.getSize());
query.setMaxResults(pagination.getSize());
return query.list();
}
});
}
基本上就这些,当然请求的action里面需要设置pagination的setter和getter方法
这个分页方法特点是简单,只需在action中指明请求的url,用某种方法填充pagination,在显示的页面包含pagination.jsp即可。
package com.shop.bean;
import java.util.List;
public class PageView <T> {
private int currentPage = 1;
private long totalPage = 1;
private long totalRecord = 1;
private List <T> records;
private int firstIndex = 1;
private PageIndex pageIndex;
private int maxResult = 12;
public PageView(int currentPage, int maxResult) {
this.currentPage = currentPage;
this.maxResult = maxResult;
this.firstIndex = currentPage * maxResult;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public void setQueryResult(QueryResult <T> qr){
setTotalRecord(qr.getTotal());
setRecords(qr.getDatas());
}
public long getTotalPage() {
return totalPage;
}
public void setTotalPage(long totalPage) {
this.totalPage = totalPage;
this.pageIndex = WebTool.getPageIndex(this.maxResult, this.currentPage, this.totalPage);
}
public long getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(long totalRecord) {
this.totalRecord = totalRecord;
setTotalPage(totalRecord / this.maxResult == 0 ? totalRecord / this.maxResult : totalRecord / this.maxResult + 1);
}
public List <T> getRecords() {
return records;
}
public void setRecords(List <T> records) {
this.records = records;
}
public int getFirstIndex() {
return firstIndex;
}
public PageIndex getPageIndex() {
return pageIndex;
}
public void setPageIndex(PageIndex pageIndex) {
this.pageIndex = pageIndex;
}
public int getMaxResult() {
return maxResult;
}
public void setMaxResult(int maxResult) {
this.maxResult = maxResult;
}
public void setFirstIndex(int firstIndex) {
this.firstIndex = firstIndex;
}
}
画面的代码:
<s:iterator value="#request.pageView.pageIndex.pageList">
<s:if test="#request.pageView.currentPage == 4"> <b> <font color="#FFFFFF">第 <s:property/>页 </font> </b> </s:if>
<s:if test="#request.pageView.currentPage != 4"> <a href="javascript:topage( <s:property/>)" class="a03">第 <s:property/>页 </a> </s:if>
</s:iterator>
action中的代码:
Map <String, Object> request = (Map <String, Object>)ActionContext.getContext().get("request");
request.put("pageView", pageView);
<s:iterator value="#request.pageView.pageIndex.pageList">中="#request.pageView.pageIndex.pageList值能正常获取,可是 <s:if test="#request.pageView.currentPage == 4"> 中的="#request.pageView.currentPage值获取不到正确的值,这是什么原因啊?
问题补充:
<s:iterator value="#request.pageView.pageIndex.pageList">
<s:if test="{#request.pageView.currentPage == 4}"><b><font color="#FFFFFF">第<s:property/>页</font></b></s:if>
<s:if test="{#request.pageView.currentPage != 4}"><a href="javascript:topage(<s:property/>)" class="a03">第<s:property/>页</a></s:if>
</s:iterator>
发表评论
-
偶数样式
2008-11-04 12:25 591<s:if test="#index. ... -
jdbc习惯性钝化
2009-08-14 10:34 6311、建立数据库连接 首先要建立一个到想要使用的DB ... -
Struts2+JQuery+JSON集成
2009-09-30 12:52 695Struts2+JQuery+JSON集成 细 ... -
Is there a server running on localhost:3306?
2009-11-03 15:50 778这个是mysql版本不同的问题 -
velocity的默认加载路径修改
2009-11-10 15:15 1119package com.yaday.test;import ... -
关于表达式中的#、%、$
2009-11-23 10:53 938引用自:http://blog.csdn.ne ... -
spring结合velocity的应用实例
2009-11-26 11:36 945import java.util.Map; import or ...
相关推荐
下面将详细解释如何在一个高效简洁的方式下实现Struts分页。 首先,我们需要理解分页的基本原理。分页通常是通过在数据库中限制查询结果的数量,每次只加载一定数量的数据(称为一页),然后根据用户的交互(如点击...
总的来说,Struts分页的优势在于其模块化的设计,通过ActionForm、Action、标签库和拦截器等组件,能够将分页逻辑从业务逻辑中解耦,使代码更易于维护和扩展。同时,其提供的各种功能,如国际化、主题支持和性能优化...
struts分页实例
本项目名为“jsp +struts 分页经典”,显然是一个利用这两种技术实现的分页展示数据的案例。下面我们将深入探讨JSP和Struts框架,以及它们在分页、查询和数据操作中的应用。 首先,JSP是Java平台上的动态网页技术,...
struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页
Struts分页是Java Web开发中的一个重要概念,主要用于在用户界面上展示大量数据时进行有效管理,提升用户体验。Struts框架,由Apache软件基金会开发,是一个用于构建MVC(Model-View-Controller)架构的开源Java框架...
Struts分页是Java Web开发中的一个重要概念,它在处理大量数据展示时尤为关键,能够有效地提高用户体验。Struts框架,作为一个MVC(Model-View-Controller)模型的开源Java库,提供了对分页功能的良好支持。在这个...
本代码示例专注于Struts中如何实现分页功能。 首先,我们需要了解分页的基本概念。分页是将大量数据分为多个较小的、易于管理的部分,每次只加载一部分数据到客户端。这通常通过两个主要部分实现:前端(用户界面)...
这个“struts分页,数据查询资料”可能包含了如何在Struts框架下实现高效、灵活的分页查询方法。 首先,Struts框架的核心是Action类,它是业务逻辑和视图之间的桥梁。在实现分页功能时,我们需要创建一个Action类,...
这里我们将深入探讨“分页大全”,包括JDBC分页、Struts分页以及分页标签的使用。 首先,让我们了解什么是分页。在网页或应用中,分页是指将大量数据分割成若干小部分,每次只加载一部分,用户可以逐页浏览,而不是...
一、此演示使MS Sql Server 2000默认安装的的数据库northwind,使用CUSTOMERS表中的数据做为演示,不用自已到处找表或自已建表 二、此Struts分页是一次性读取本次分页的数据,翻页时不用再读数据库中的数据。...
在Ajax+Struts分页中,主要涉及以下几个步骤: 1. **前端页面**:使用JavaScript和HTML构建用户界面。当用户点击分页链接时,会触发Ajax请求,而不是传统的页面跳转。 2. **Ajax请求**:通常使用JavaScript库如...
Struts分页是一种在Web应用中实现数据展示的高效方式,尤其当数据量较大时,分页能够提高用户体验,避免一次性加载过多数据导致页面响应慢。Struts是Apache的一个开源框架,它主要用于构建基于Java EE的Web应用。...
Struts分页算法是Java Web开发中常用的一种技术,它主要用于处理大数据集合的展示,提高网页的加载速度和用户体验。在Struts框架下,我们通常会结合Servlet、JSP和数据库查询来实现分页功能。以下将详细讲解Struts...
### Struts分页显示源码实例解析 #### 一、背景介绍 在Web应用开发中,特别是使用MVC架构的框架如Struts时,分页显示是常见的需求之一。分页不仅能提高用户体验,还能减轻服务器压力。本文档将详细介绍如何在...
"Hibernate+Struts分页的实现"这个话题关注的就是如何在大型数据集的场景下,结合这两种技术来有效地实施分页策略。 首先,让我们了解一下Struts框架。Struts是一个基于MVC(Model-View-Controller)设计模式的Java...
Struts分页算法是Web应用开发中的重要组成部分,特别是在大型数据集展示时,为了提高用户体验,需要将数据分页展示。本算法遵循Model-View-Controller(MVC)设计模式,使得代码结构清晰,易于维护。 在Struts框架...
在这个“纯struts分页小例子”中,我们将探讨如何在Struts框架下实现分页功能,这在处理大量数据展示时非常常见。 分页功能能够有效地提高用户体验,避免一次性加载过多数据导致页面响应慢或内存压力大。在Struts...
综上所述,"JSP JDBC WEB STRUTS 分页综合实例8"是一个结合了Java Web开发多个关键技术的项目,它利用JSP展示分页数据,通过JDBC与数据库交互获取数据,Struts框架负责请求处理和业务逻辑,而分页机制则优化了数据...