分享
 
 
 

struts中符合MVC结构的分页实现

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

看得太多的关于分页的文章,但真正符合MVC结构的不多。

还有就是为什么有很多人问struts分页的问题?如果你能在非struts框架中实现分页,那么完全搬过来不就行了。既然问了,我想大家是想使用struts分页中的标签来分页吧。一个好的struts分页实现是不应该破坏struts的MVC宗旨的。下面要讲的分页实现上可能会麻烦一些,但是比在jsp页面中穿插大堆java代码要易维护的多,而且可复用性极好。下面先给出我的分页在使用过程中看上去都是什么样的,也许你对这种分页并不感兴趣。

需要分页的jsp页面中只需这些:

page.jsp

<logic:iterate id="item" name="pageCtrl" property="datas">

<bean:write name="item" property="propertyValues.id"/><br/>

<bean:write name="item" property="propertyValues.title"/><br/>

<bean:write name="item" property="propertyValues.publishDate"/><br />

</logic:iterate>

<form name="PageForm" action="/pageAction.do" >

<%@ include file="/pagectrl.jsp"%>

</form>

------------------------------------------------------------------------

pageAction中只需这些:

String sCurPageNum = request.getParameter("curPageNum");//取得当前页,这个参数在包含文件pagectrl.jsp中,往后看就知道了

int curPageNum = 1;

if (sCurPageNum != null) {

curPageNum = Integer.parseInt(sCurPageNum);

}

PageCtrl pageCtrl = new PageCtrl(curPageNum, model.WTONews.getPageInfo());//model.WTONews这个类是难点

request.setAttribute("pageCtrl", pageCtrl);//可以看到,在page.jsp页面中的数据都是从pageCtrl对象中获得的。

mapping.findForward("page");

--------------------------------------------------------------------------

model.WTONews类中的getPageInfo()方法:

public static PageInfo getPageInfo() {

List p = new Vector();

p.add("title");

p.add("id");

p.add("publishDate");

PageInfo pageInfo = new PageInfo();

pageInfo.setSelectAllSql("select title,id,publishdate from wto_article");

pageInfo.setRowCountSql("select count(*) from wto_article");

pageInfo.setRowCountPerPage(4);

pageInfo.setPropertyNames(p);

pageInfo.setBeanName("model.WTONews");

return pageInfo;

}

--------------------------------------------------------------------------

好了,到目前为止,你所看到的分页实现应该还算干净利索吧!如果你有兴趣的话,请继续阅读。

这个分页的思路如下,(思路比源代码重要的多):

首先,在pageAction中,我们要获取page.jsp中要显示的数据。

a)获取当前页代码,如果为空,即说明我们还没有访问过page.jsp。那么要设为第一页。

b)建立pageCtrl对象,该对象负责根据curPageNum,来获取当前要显示的数据。而数据库的访问语句,每页显示多少行等信息则由相关的model来提供。正如前面你见到的那样。

c)把该pageCtrl对象存入request作用域。

d)转发到page.jsp。(如果你不懂转发,请参考http://blog.csdn.net/funcreal/archive/2004/09/17/108060.aspx

然后,就是显示了

a)通过<logic:iterate id="item" name="pageCtrl" property="datas">这一句你应该可以猜到pageCtrl提供了一个getDatas方法,并且它的类型很可能是List。事实上,确是如此。

b)然后显示每一个属性<bean:write name="item" property="propertyValues.id"/>注意里面的property的值是propertyValues.id。这个并不奇怪,struts支持这样的语法来调用,它相当于getPropertyValues().getId(),至于这里为什么是这样的,那是实现细节,你不必关心。将来你的实现也许是这样的<bean:write name="item" property="id"/>

c)分页form,这个form将会提交到pageAction中,同时还会把当前页一起带过去。<%@ include file="/pagectrl.jsp"%>包含了分页的页脚,它的源代码将在最后给出,它的实现很简单,实际上,你并不需要关心它的很多细节,复用就行了。

pagectrl.jsp你把它粘到dreamweaver中,他就回原形毕露了。在使用过程中,不用对他进行什么修改,你只需注意变量名要一致。

<jsp:useBean id="pageCtrl" class="funcreal.db.PageCtrl" scope="request" />

共检索到<%=pageCtrl.getRowCount()%>条记录 共<%=pageCtrl.getPageCount()%>页 每页<%=pageCtrl.getRowCountPerPage()%>行 <a href="#" onClick="gotoPage(1)">首页</a> <a href="#" onClick="gotoPage(<%=pageCtrl.getCurPageNum()%> - 1)">上一页</a> 第<%=pageCtrl.getCurPageNum()%>页 <a href="#" onClick="gotoPage(<%=pageCtrl.getCurPageNum()%> + 1)">下一页</a> <a href="#" onClick="gotoPage(<%=pageCtrl.getPageCount()%>)">末页</a> 转到第

<SELECT name="curPageNum" onchange="jump()">

<% for(int i=1;i<=pageCtrl.getPageCount();i++){

if (i== pageCtrl.getCurPageNum()){%>

<OPTION selected value=<%=i%>><%=i%></OPTION>

<%}else{%>

<OPTION value=<%=i%>><%=i%></OPTION>

<%}

}%>

</SELECT>页

<script language="javascript" >

function jump(){

document.PageForm.submit();

return ;

}

function gotoPage(pageNumber){

if(pageNumber < 1){

pageNumber =1;

}

if(pageNumber > "<%=pageCtrl.getPageCount()%>"){

pageNumber = "<%=pageCtrl.getPageCount()%>";

}

document.all.curPageNum.value = pageNumber;

document.PageForm.submit();

return ;

}

</script>

事实上,在page.jsp页面中剥去struts标签,这个分页实现同样适用于非struts框架。你可能很想参考我的源代码,但我还是希望你自己能够开动脑筋,实现一下。思路应该很清晰了。如果,你实在写不出来,那么留下联系方式,在我能力范围内的,我会给你发一份源代码过去,但前提是你有一定的面向对象编程的基础,因为其中涉及到了模板模式这种依赖多态性的实现,否则,请勿扰,谢谢。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有