java 分页功能_java web 开发分页功能

Dao层代码:

1、数据层接口代码

package cn.cdi.util.page;

import java.util.List;

public interface MemberDao {

/**

* 分页查询

* @param hql 查询的条件

* @param offset 开始记录

* @param length 一次查询几条记录

* @return

*/

public List queryForPage(final String hql,final int offset,final int length);

/**

* 查询所有记录数

* @param hql 查询的条件

* @return 总记录数

*/

public int getAllRowCount(String hql);

}

2、实现接口的代码

package cn.cdi.util.page;

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;

public class MemberDaoImpl extends HibernateDaoSupport implements MemberDao {

/**

* 分页查询

* @param hql 查询的条件

* @param offset 开始记录

* @param length 一次查询几条记录

* @return

*/

public List queryForPage(final String hql,final int offset,final int length){

List list = getHibernateTemplate().executeFind(new HibernateCallback(){

public Object doInHibernate(Session session) throws HibernateException,SQLException{

Query query = session.createQuery(hql);

query.setFirstResult(offset);

query.setMaxResults(length);

List list = query.list();

return list;

}

});

return list;

}

/**

* 查询所有记录数

* @return 总记录数

*/

public int getAllRowCount(String hql){

return getHibernateTemplate().find(hql).size();

}

}

业务逻辑层代码

1、业务逻辑层接口代码

package cn.cdi.util.page;

public interface MemberService {

/**

* 分页查询

* @param pageSize 每页显示几条

* @param currentPage 当前第几页

* @return 封闭了分页信息(包括记录集list)的Bean

*/

public PageBean queryForPage(int pageSize,int currentPage,String ModelBean);

}

2、业务逻辑层实现接口代码

package cn.cdi.util.page;

import java.util.List;

public class MemberServiceImpl implements MemberService{

//通过applicationContext.xml配置文件注入MemberDao的值

private MemberDao memberDao;

public void setMemberDao(MemberDao memberDao) {

this.memberDao = memberDao;

}

/**

* 分页查询

* @param currentPage 当前第几页

* @param pageSize 每页大小

* @return 封闭了分页信息(包括记录集list)的Bean

*/

public PageBean queryForPage(int pageSize,int page,String hql){

//final String hql = "from "+ModelBean; //查询语句

int allRow = memberDao.getAllRowCount(hql); //总记录数

int totalPage = PageBean.countTotalPage(pageSize, allRow); //总页数

final int offset = PageBean.countOffset(pageSize, page); //当前页开始记录

final int length = pageSize; //每页记录数

final int currentPage = PageBean.countCurrentPage(page);

List list = memberDao.queryForPage(hql,offset, length); //"一页"的记录

//把分页信息保存到Bean中

PageBean pageBean = new PageBean();

pageBean.setPageSize(pageSize);

pageBean.setCurrentPage(currentPage);

pageBean.setAllRow(allRow);

pageBean.setTotalPage(totalPage);

pageBean.setList(list);

pageBean.init();

return pageBean;

}

}

bean层代码

package cn.cdi.util.page;

import java.util.ArrayList;

import java.util.List;

import cn.cdi.importData.entity.ImportTask;

public class PageBean {

@SuppressWarnings("rawtypes")

private List list = new ArrayList(); //要返回的某一页的记录列表

private int allRow; //总记录数

private int totalPage; //总页数

private int currentPage; //当前页

private int pageSize; //每页记录数

private boolean isFirstPage; //是否为第一页

private boolean isLastPage; //是否为最后一页

private boolean hasPreviousPage; //是否有前一页

private boolean hasNextPage; //是否有下一页

@SuppressWarnings("rawtypes")

public List getList() {

return list;

}

@SuppressWarnings("rawtypes")

public void setList(List list) {

this.list = list;

}

public int getAllRow() {

return allRow;

}

public void setAllRow(int allRow) {

this.allRow = allRow;

}

public int getTotalPage() {

return totalPage;

}

public void setTotalPage(int totalPage) {

this.totalPage = totalPage;

}

public int getCurrentPage() {

return currentPage;

}

public void setCurrentPage(int currentPage) {

this.currentPage = currentPage;

}

public int getPageSize() {

return pageSize;

}

public void setPageSize(int pageSize) {

this.pageSize = pageSize;

}

/** *//**

* 初始化分页信息

*/

public void init(){

this.isFirstPage = isFirstPage();

this.isLastPage = isLastPage();

this.hasPreviousPage = isHasPreviousPage();

this.hasNextPage = isHasNextPage();

}

/** *//**

* 以下判断页的信息,只需getter方法(is方法)即可

* @return

*/

public boolean isFirstPage() {

return currentPage == 1; // 如是当前页是第1页

}

public boolean isLastPage() {

return currentPage == totalPage; //如果当前页是最后一页

}

public boolean isHasPreviousPage() {

return currentPage != 1; //只要当前页不是第1页

}

public boolean isHasNextPage() {

return currentPage != totalPage; //只要当前页不是最后1页

}

/** *//**

* 计算总页数,静态方法,供外部直接通过类名调用

* @param pageSize 每页记录数

* @param allRow 总记录数

* @return 总页数

*/

public static int countTotalPage(final int pageSize,final int allRow){

int totalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize+1;

return totalPage==0?1:totalPage;

}

/** *//**

* 计算当前页开始记录

* @param pageSize 每页记录数

* @param currentPage 当前第几页

* @return 当前页开始记录号

*/

public static int countOffset(final int pageSize,final int currentPage){

final int offset = pageSize*(currentPage-1);

return offset;

}

/** *//**

* 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替

* @param page 传入的参数(可能为空,即0,则返回1)

* @return 当前页

*/

public static int countCurrentPage(int page){

final int curPage = (page==0?1:page);

return curPage;

}

}

分页代码的使用

1、业务逻辑层获取封装数据代码实例(注这里需要利用spring的Ioc 将memberService注入到你业务逻辑层里面去)

/**

* 获取日志信息

* @param displayedCount //从第几条开始取

* @param pageDisplayCount //每页显示数

* @return 每页的日志信息

*/

public PageBean getLogInfos(int displayedCount,int pageDisplayCount) {

String hql = "";

hql = "from LogInfo";

return this.packImportTaskList(memberService.queryForPage(pageDisplayCount, displayedCount, hql));

}

/**

* 封装导入任务列表

*

* @param pageBean

* @return

*/

@SuppressWarnings("rawtypes")

public PageBean packImportTaskList(PageBean pageBean) {

List list = pageBean.getList();

List> newlist = new ArrayList>();

if (list != null)

for (int i = 0; i < list.size(); i++) {

LogInfo it = (LogInfo) list.get(i);

HashMap map = new HashMap();

String getTime = it.getUpdateDataTime();

getTime=getTime.substring(0, 4)+"-"+getTime.substring(4, 6)+"-"+getTime.substring(6, 8)+" "+getTime.substring(8, 10)+":"+getTime.substring(10, 12)+":"+

getTime.substring(12, 14);

map.put("updateDataTime",getTime);//更新数据日期

map.put("errorFilePath", it.getErrorFilePath());//错误数据文件的存放路径

map.put("operatorNum", it.getOperatorNum());//操作员账号

map.put("pckageFileSize", it.getPckageFileSize());//文件包大小(MB)

map.put("updateFileName", it.getUpdateFileName());//更新的文件名

map.put("updateQuantity", it.getUpdateQuantity());//更新数量(书目数据数量,馆藏数据量)

map.put("updateState", it.getUpdateState());//更新状态:成功,失败

newlist.add(map);

}

pageBean.setList(newlist);

return pageBean;

}

2、在Action中的使用

//第几页

private int page = 1;

//包含分页信息的bean

private PageBean pageBean;

/**

* 日志分页显示(每页10条)

* @return

*/

public String showLogInfo() {

this.pageBean = importDataBusiness.getLogInfos(page, 10);

return "showLogInfo";

}

页面代码

查看覆盖日志

function submitForm(maxpage){

var page = document.getElementById("page").value;

var patrn=/^[0-9]{1,20}$/;

if (!patrn.exec(page)){

alert("请输入正整数字!");

} else if(page > maxpage){

alert("跳转页码不能超过总页数!");

}else if(page < 1){

alert("跳转页码不能小与1!");

}else{

document.getElementById("searchImportTask").submit();

}

}

function checkDel(){

var str = "/%E6%B1%A4%E5%A7%86%E7%8C%AB";alert(str);

var str2 = decodeURIComponent(str);alert(str2);

document.location.href("/downloads/汤姆猫.zip")

var url = document.location.href;

var name=""

if (url.indexOf("=")>0)

{

name = url.substring(url.indexOf("=")+1,url.length)

}

alert(url);

var qq = document.getelementbyid("jiema");

alert(qq);

}

查看覆盖日志

更新数据日期操作员账号更新的文件名文件包大小(MB)更新数量更新状态错误数据文件的存放路径
${logInfo.updateDataTime!}${logInfo.operatorNum!}${logInfo.updateFileName!}${logInfo.pckageFileSize!}${logInfo.updateQuantity!}失败成功#if>${logInfo.errorFilePath!}

#list>

.result{ text-align:center; padding-top:10px}

.red{ color:#CE490F}

a{ color:#656565}

a:hover{ color:#CE490F}

.input_blur{ width:35px; height:14px}

${pageBean.allRow!} 条   共 ${pageBean.totalPage!} 页   第 ${pageBean.currentPage!}

首页   上一页

首页

上一页

#if>

下一页   末页

下一页

末页

#if>

GO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值