国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Java Web 開發(fā)中如何進行分頁

2019-11-15 01:08:39
字體:
來源:轉載
供稿:網(wǎng)友
java Web 開發(fā)中如何進行分頁

*分頁:

????摘要:所用框架為:Hibernate+SPRing+Struts2,以分頁顯示后臺用戶列表為例

????1.設計實體:頁面類PageBean

????????1.1 分析:

????????????當前頁:currentPage(請求數(shù)據(jù))

????????????總記錄數(shù):recordCount(查數(shù)據(jù)庫:count(*))

????????????頁面大小:pageSize(配置文件設置值)

????????????本頁的數(shù)據(jù)列表:recordList(查詢數(shù)據(jù)庫:select *)

?

????????????總頁數(shù):pageCount(計算)=(recordCount+pageSize-1)/pageSize;

????????????開始索引:beginPageIndex(計算)

????????????結束索引:endPageIndex(計算)

????????1.2 代碼,這里以顯示10個頁碼索引為例:

????????????public class PageBean{

?

????????????????private int currentPage;

????????????????private int recordCount;

????????????????private int pageSize;

????????????????private List recordList;

?

????????????????private int pageCount;

????????????????private int beginPageIndex;

????????????????private int endPageIndex;

?

????????????????public PageBean(int currentPage,int recordCount,int pageSize,int recordList){

????????????????????//當前頁

????????????????????this.currentPage=currentPage;

????????????????????//總記錄數(shù)

????????????????????this.recordCount=recordCount;

????????????????????//頁面大小

????????????????????this.pageSize=pageSize;

????????????????????//當前頁的總記錄列表

????????????????????this.recordList=recordList;

?

????????????????????//計算pageCount:總記錄數(shù)

????????????????????//這里可以用邏輯判斷,如:

????????????????????/*

????????????????????*if(recordCount%pageSize==0){

????????????????????*????pageCount=recordCount/pageSize;????

????????????????????*}else{

????????????????????*????pageCount=recordCount/pageSize+1;

????????????????????*}

????????????????????*/

????????????????????//或則用算法,自己琢磨

????????????????????pageCount=(recordCount+pageSize-1)/pageSize;

????????????????????

????????????????????//這里以顯示十個頁碼索引為例,設置開始頁碼索引和結束頁碼索引

????????????????????//當頁面總數(shù)小于10個時

????????????????????if(pageCount<=10){

????????????????????????beginPageIndex=1;

????????????????????????endPageIndex=pageCount;

????????????????????}else{

????????????????????????//當頁面總素大于10個時

????????????????????????beginPageIndex=currentPage-4;

????????????????????????endPageIndex=currentPage+5;

?

????????????????????????if(beginPageIndex<1){

????????????????????????????beginPageIndex=1;

????????????????????????????endPageIndex=10;

????????????????????????}

????????????????????????else if(endPageIndex>pageCount){

????????????????????????????beginPageIndex=pageCount-9;

????????????????????????????endPageIndex=pageCount;

????????????????????????}

????????????????????}

????????????????}

????????????????

????????????????//Setter和Getter

????????????????set...

????????????????get...

????????????}

????2.設置實體工具類:HqlHelper

????????2.1 分析

????????2.2 代碼

????????????public class HqlHelper{

????????????????//from子句

????????????????private String fromClause;

????????????????//where子句

????????????????private String whereClause;

????????????????//排序子句

????????????????private String orderClause;

????????????????

????????????????//參數(shù)集合,Hql語句中where子句中用到的參數(shù)對象

????????????????private List<Object> parameters=new ArrayList<Object>();

????????????????

????????????????//構造函數(shù)設置fromClause,默認別名為"o"

????????????????public HqlHelper(Class clazz){

????????????????????this.fromClause="FROM "+clazz.getSimpleName+" o";

????????????????}

????????????????//自定義別名

????????????????public HqlHelper(Class clazz,String alias){

????????????????????this.fromClause="FROM "+clazz.getSimpleName+alias;

????????????????}

????????????????

????????????????//設置where子句的,以及用到的參數(shù)對象,這就是查詢條件

????????????????public HqlHelper addCondition(String condition,Object... params){

????????????????????if(whereClause.length()==0){

????????????????????????whereClause=" WHERE "+condition;

????????????????????}else{

????????????????????????where+=" AND "+condition;

????????????????????}

????????????????????

????????????????????if(params!=null && params.length>0){

????????????????????????for(Object o:params){

????????????????????????????parameters.add(0);

????????????????????????}

????????????????????}

????????????????????return this;

????????????????}

????????????????//設置是否追加,這個接口留給用戶,到時方便用戶開發(fā)

????????????????public HqlHelper addCondition(boolean append,String condition,Object... params){

????????????????????if(append){

????????????????????????addCondition(condition,params);

????????????????????}

????????????????????return this;

????????????????????

????????????????}

????????????????

????????????????//設置排序條件子句

????????????????public HqlHelper addOrder(String propertityName,boolean isAsc){

????????????????????if(orderClause!=null && orderClause.length()>0){

????????????????????????orderClause=" ORDER BY "+propertityName+(isAsc?" ASC":" DESC");

????????????????????}else{

????????????????????????orderClause+=", "+popertityName+(isAsc?" ASC":" DESC");

????????????????????}

????????????????????

????????????????????return this;

????????????????}

????????????????//這個增加了是否追加排序條件子句

????????????????public HqlHelper addOrder(boolean append ,String propertityName,boolean isAsc){

????????????????????if(append){

????????????????????????addOrder(propertityName,isAsc);

????????????????????}

????????????????????return this;

????????????????}

????????????????

????????????????//得到查詢子句hql

????????????????public String getQueryListHql(){

????????????????????return fromClause+whereClause+orderClause;

????????????????}

?

????????????????//計數(shù)hql

????????????????public String getCountHql(){

????????????????????return "SELECT COUNT(*) "+fromClause+whereClause;

????????????????}

????????????????

????????????????//參數(shù)集合get接口,供外部訪問

????????????????public List<Object> getParameters(){

????????????????????return parameters;

????????????????}

????????????????

//這里只要兩個參數(shù),跳轉的頁面,和繼承了BaseDao(自己抽取的接口,//很有用的)的service

????????????????public HqlHelper buildPageBeanForStruts2(int pageNum,BaseDao<?> service){

????????????????????

????????????????????PageBean pageBean=service.getBean(pageNum,this);

????????????????????ActionContext.getContext.getValueStack.push(pageBean);

????????????????????return this;

????????????????}

????????????}

????3.設計service,這里把方法放到BaseDao中,service繼承即可:

????????3.1 代碼

????????????//事物注解(許在Spring中配置,TransactionManager)

????????????@Transactional

????????????public class BaseDaoImpl<T> implements BaseDao<T>{

????????????????//這里需要配置sessionFactory在Spring容器中,自己配不難

????????????????//這個是注解,相當于Setter

????????????????@Resource

????????????????private SessionFactory sessionFactory;

????????????????//實體類型

????????????????protected Class<T> clazz;

?

????????????????//在構造函數(shù)中進行初始化clazz

????????????????public BaseDaoImpl(){

????????????????????ParameterirzedType pt=(ParameterizedType)this.getClass().getGenericSuperclass();

????????????????????this.clazz=(Class)pt.getActualTypeArguments()[0];

????????????????}

????????????????

????????????????//獲取Session,方便操作數(shù)據(jù)庫

????????????????protected Session getSession(){

????????????????????return sessionFactory.getCurrentSession();

????????????????}

?

????????????????public PageBean getBean(int pageNum,HqlHelper hqlHelper){

????????????????????

????????????????????//參數(shù)集合

????????????????????private List<Object> parameters=hqlHelper.getParameters();

????????????????????//配置的頁面大小

????????????????????private int pageSize=Configuration.getPageSize();

????????????????????

????????????????????//recordCount,總記錄數(shù)

????????????????????Query countQuery=getSession().createQuery(HqlHelper.getCountHql());

????????????????????if(parameters!=null && parameters.size()>0){

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

????????????????????????????countQuery.setParameter(i,parameters.get(i));

????????????????????????}????

????????????????????}????????????????????

????????????????????Long recordCount=(Long)countQuery.uniqueResult();

?

????????????????????//recordList,當前頁的記錄列表

????????????????????Query listQuery=getSession().createQuery(HqlHelper.getQueryListHql());

????????????????????//設置查詢參數(shù)

????????????????????if(parameters!=null && parameters.size()>0){

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

????????????????????????????listQuery.setParameter(i,parameters.get(i));

????????????????????????}

????????????????????}

????????????????????//獲取當前頁的記錄

????????????????????listQuery.setFirstResutl(pageSize*(pageNum-1));

????????????????????listQuery.setMaxResults(pageSize);

????????????????????List recordList=listQuery.list();

????????????????????

????????????????????return new PageBean(pageNum,recordCount.intValue(),pageSize,recordList);

????????????????}

????????????}

?

????4.設計Action:以UserAction為例

????????4.1 代碼:

????????????//順帶把配置加上,交給Spring容器管理

????????????@Controller

????????????@Scope("prototype")

????????????public class UserAction extends ActionSupport{

????????????????

????????????????private int pageNum;

????????????????get... set...;

?

????????????????@Resource

????????????????private UserService userService;

?

????????????????//用戶數(shù)據(jù)列表,分頁顯示

????????????????public String list(){

????????????????????new HqlHelper(User.class,"u")//

????????????????????.buildPageBeanForStruts2(pageNum,userService);

????????????????}

????????????}

?

????5.頁面:設計一個公共頁面 pageView.jspf,通用的

%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>

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

?

<divid=PageSelectorBar>

????<divid=PageSelectorMemo>

????????頁次:${currentPage}/${pageCount}頁&nbsp;每頁顯示:${pageSize}條&nbsp;總記錄數(shù):${recordCount}條

????</div>

????<divid=PageSelectorSelectorArea>

????????

????????<ahref="javascr><imgsrc="${pageContext.request.contextPath}/style/blue/images/pageSelector/firstPage.png"/></a>

?

????????<s:iteratorbegin="%{beginPageIndex}"end="%{endPageIndex}"var="num">

????????????<s:iftest="currentPage==#num">

????????????????<%--當前頁 --%>

????????????????<spanclass="PageSelectorNum PageSelectorSelected">${num}</span>

????????????</s:if>

????????????<s:else>

????????????????<%--非當前頁 --%>

????????????????<spanclass="PageSelectorNum"style="cursor: hand;"onClick="gotoPage(${num});">${num}</span>

????????????</s:else>

????????</s:iterator>

????????<ahref="Javascript:gotoPage(${pageCount})"title="尾頁"style="cursor: hand;"><img

????????????????src="${pageContext.request.contextPath}/style/blue/images/pageSelector/lastPage.png"/></a>轉到:

????????<selectid="pn"onchange="gotoPage(this.value)">

????????????<s:iteratorbegin="1"end="%{pageCount}"var="num">

????????????????<optionvalue="${num}">

????????????????????${num}

????????????????</option>

????????????</s:iterator>

????????</select>

????????<scripttype="text/javascript">

????????????//回顯頁碼

????????????$("#pn").val(${currentPage});

????????</script>

????</div>

</div>

?

?

<scripttype="text/javascript">

????function gotoPage(pageNum){

????????????//window.location.href="topicAction_show.action?id=${id}&pageNum="+pageNum;

????????????$(document.forms[0]).append("<input type='hidden' name='pageNum' value='"+pageNum+"'/>");

????????????document.forms[0].submit();//提交表單????

????????}

</script>

?


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 禄丰县| 宿松县| 宝坻区| 肇州县| 尖扎县| 博野县| 康平县| 五家渠市| 潞西市| 台北县| 高淳县| 礼泉县| 晋宁县| 大化| 渭南市| 安丘市| 麻城市| 黄浦区| 海门市| 元朗区| 普宁市| 金溪县| 共和县| 吉木萨尔县| 昌乐县| 奇台县| 余姚市| 临沧市| 收藏| 彩票| 平南县| 固始县| 英吉沙县| 兴文县| 临沂市| 葫芦岛市| 武冈市| 翁源县| 蓝山县| 堆龙德庆县| 进贤县|