无间程序之道-FuncReal的专栏

我们都在不断赶路忘记了出路,在失望中追求偶尔的满足

用户操作
[即时聊天] [发私信] [加为好友]
realID:funcreal
10904次访问,排名11004(1),好友0人,关注者4人。
funcreal的文章
原创 8 篇
翻译 0 篇
转载 0 篇
评论 47 篇
real的公告
姓名:Func Real
年龄:23
性别:male
OICQ:11144556
email:funcreal@yahoo.com.cn
本站文章,如未注明转载,
则均属原创,请勿用于商业用途,
转载注明出处。
最近评论
licong168:看来要的人还真不少,我也想要一份,照着思路做了一下。没通过。
alec.wen@gmail.com
谢谢!
luokun19:my email:luokun19@sina.com
thank you very much
Aaron0916:my email:nithan_2006@126.com
thanks very much
xiaolingshi:正在学习struts,想弄分页,你这个设计挺好,分享一下,谢谢了
270790112@qq.com
zuoshou1234:我正要做struts,想研究一下分页,看一下源代码,谢谢了
42823445@163.com
文章分类
收藏
    相册
    mary
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 struts中符合MVC结构的分页实现收藏

     | 旧一篇: 转发和重定向的区别


    看得太多的关于分页的文章,但真正符合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框架。你可能很想参考我的源代码,但我还是希望你自己能够开动脑筋,实现一下。思路应该很清晰了。如果,你实在写不出来,那么留下联系方式,在我能力范围内的,我会给你发一份源代码过去,但前提是你有一定的面向对象编程的基础,因为其中涉及到了模板模式这种依赖多态性的实现,否则,请勿扰,谢谢。

    发表于 @ 2004年09月17日 18:39:00|评论(loading...)|编辑

     | 旧一篇: 转发和重定向的区别

    评论

    #张波 发表于2004-09-17 20:57:00  IP: 219.140.232.*
    大哥能给我份源代码吗?谢谢了!
    lovehuangyuan@hotmail.com
    #funcreal 发表于2004-09-19 20:51:00  IP: 218.12.35.*
    张波,和我同学同名。
    #zhongzuo1981 发表于2004-09-24 17:27:00  IP: 221.219.230.*
    也给我一份吧,谢谢了!!!
    zhongzuo@sina.com
    #vivian 发表于2004-09-27 15:23:00  IP: 211.99.23.*
    给我份源代码吧,急用!!
    谢谢!
    vivian_liu99@sina.com
    #zhuxiaopeng 发表于2004-10-02 09:55:00  IP: 222.9.133.*
    给我一份吧,zhuxiaopeng@mysoftcorp.com
    #日月无又 发表于2004-10-07 13:24:00  IP: 218.18.131.*
    很好呀,
    给我一份可以吗》
    51447zhg@163.com
    #cn 发表于2004-10-26 17:01:00  IP: 210.51.195.*
    这种实现比一次查询然后分页性能要好得多,当数据量很大的时候

    能否参考一下你的代码?

    cndba@163.com
    #awxly 发表于2004-11-12 16:22:00  IP: 218.104.102.*
    我也在做JSP,希望了解比较好的分页方法,求源码一份。awxly@hotmail.com
    #xiexie 发表于2004-11-12 15:11:00  IP: 211.157.116.*
    给我一份吧,谢了
    weiwei1985cn2001@yahoo.com.cn
    #qingxin1010 发表于2004-11-12 15:48:00  IP: 211.155.226.*
    看的不是太明白,也发给我一份吧!
    我的邮箱:qingxin1010@163.com
    #gamezf 发表于2004-11-15 14:04:00  IP: 202.107.224.*
    i really need this,strong man send me a copy ?
    gamezf@hotmai.com
    #zjsoft 发表于2004-11-23 11:07:00  IP: 61.144.230.*
    给我一份吧
    zjsoft@163.com
    #oncemoremm 发表于2005-02-24 15:45:00  IP: 220.169.49.*
    不错啊,果然有见地,不同于那些垃圾。想看看你的代码,可以吗?谢谢!tian_tmm@wu-ling.com
    #ghostmanxp 发表于2005-02-28 14:34:00  IP: 221.122.34.*
    哈哈,大家要,我也要一份
    hacker5257@hotmail.com
    #cxykxl 发表于2005-03-03 12:47:00  IP: 221.122.46.*
    cxykxl@163.com
    #cxykxl 发表于2005-03-03 12:48:00  IP: 221.122.46.*
    我现在急用,谢谢!
    cxykxl@163.com
    #meihui 发表于2005-03-11 22:34:00  IP: 222.76.88.*
    能不能就这个分页请教个问题,就是你写的这个分页的数据集事先预定好的,那要是需要提交某些条件供数据库查询,那该怎么做呢?我的邮箱linwb@163.com,希望能得到的你帮助。
    #linwb 发表于2005-03-11 22:34:00  IP: 222.76.88.*
    能不能就这个分页请教个问题,就是你写的这个分页的数据集事先预定好的,那要是需要提交某些条件供数据库查询,那该怎么做呢?我的邮箱linwb@163.com,希望能得到的你帮助。
    #keith 发表于2005-10-10 14:58:00  IP: 211.100.21.*
    对查询结果分页好像不太好实现,查询时URL通常会带很多的查询参数,gotoPage也只是针对页数进行的。留个EMAIL共同进步:fastpace@163.com。
    #lkz 发表于2006-03-21 16:09:00  IP: 221.227.162.*
    高手啊。
    我也想要
    dlmypig@yahoo.com.cn
    #tombo 发表于2006-09-04 20:31:00  IP: 222.92.109.*
    我也没有实现好,我的email:tombo.tang@gmail.com,非常感谢!
    #wellwei123 发表于2007-03-21 13:48:29  IP: 59.42.176.*
    分页还未实现 程序还得进行.可以发一份给我吗wellwei123@hotmail.com
    谢谢:)
    #zuoshou1234 发表于2007-08-16 10:41:21  IP: 10.4.2.93, 60.*
    我正要做struts,想研究一下分页,看一下源代码,谢谢了
    42823445@163.com
    #xiaolingshi 发表于2007-12-14 20:09:16  IP: 59.47.82.*
    正在学习struts,想弄分页,你这个设计挺好,分享一下,谢谢了
    270790112@qq.com
    #Aaron0916 发表于2008-05-20 00:34:03  IP: 202.116.149.*
    my email:nithan_2006@126.com
    thanks very much
    #luokun19 发表于2008-08-20 16:13:48  IP: 202.115.31.*
    my email:luokun19@sina.com
    thank you very much
    #licong168 发表于2008-10-17 15:21:03  IP: 222.209.125.*
    看来要的人还真不少,我也想要一份,照着思路做了一下。没通过。
    alec.wen@gmail.com
    谢谢!
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © real