在web项目中会经常用到分页操作,我做的是基于sql的分页。而每次点击下一页的时候都需要判断页面的隐藏字段来看获取一些页面信息。在action中的操作都会有一长串的判断操作和javabean的set操作。代码非常的重复。但是每次的请求翻页的信息又不相同,一时想不出如何将这个翻页的操作独立出去。
  请问下各位项目经验丰富的高人,在做web项目的时候都是如何处理翻页的,基于sql和结果集的翻页都行。谢谢~~

解决方案 »

  1.   


    比如说查询书籍,就传书籍的Id  。每次都会有一个javabean,里面有比如说是否为第一页,是否为查询书籍等等属性。这些属性在页面的hidden里面设置。感觉这么做不太好。
      

  2.   

    为什么要用隐藏字段呢?做一个分页类,里面包括一页显示的记录数,当前页数,总记录数,上一页,下一页等等,第一次查询的时候把这些信息都处理好,以后再点 翻页时 就可以根据 上一页,下一页再去查询,当然还可以做个封装查询条件的BEAN,存到session中,每次重新查询时重新给这个bean赋值,翻页时需要用到的查询条件可以到session中去取。大伙觉得呢?
      

  3.   


    我就是这么做的 , 每个action中都会有重复的 if else语句来判断是否为第一页 下一页 等等信息 ,还有只是属性不同的set get调用。看起来非常的繁琐。
    我觉得这些内容都是可以封装起来的,只是没有想到好的办法。
      

  4.   

    我的资源里有个 javabean 分页源码,楼主去看看,参考下
      

  5.   


    为什么要判断是上一页,还是下一页呢?你可以根据当前页计算出 在DB中的开始记录数,结束记录数,传给sql去处理啊。 你说呢?
      

  6.   

    总要判断用户点的是上一页还是下一页吧。如果是最后一页应该就不显示下一页,第一页就不显示上一页,所以javabean里也会需要是否为第一页和最后一页的属性。那么在action就要进行判断。。然后才是对数据库的操作。
    我用的是ibatis 也是传入javabean进行数据库操作,每次用户输入的属性我都是从actionform中提取出来存入一个对应的javabean。。如上这些基本上每个action里都一样。。感觉非常重复。  大家的web项目中也都是一样这么做的?
      

  7.   

    建议用hibernate,它可以针对不同的数据库自动产生为你分页的代码。
      

  8.   

    Hibernate分页和简单。
    queryObject.setMaxResults(5);设置分页每页显示的最大记录数!
    queryObject.setFirstResult(0);设置分页第一条记录。
      

  9.   

    那就先用hibernate帮你们自动生成分页的代码,你在拷贝代码到你自己的项目中去就OK了,我们经常这么干的。
      

  10.   

    1、定义一个Paging类,包含属性:总页数(int),总记录数(int),每页记录数(int),当前页(int),当前页记录集(Collection)
    2、定义一个用于分页的抽象action(可以从开源的如structs等继承过来):
        a)、执行时首先页面提交的关于分页的数据(每页记录数、当前页)封装成Paging对象。
        b)、执行一个抽象方法(要求子类在此方法中查询要求的数据),Paging对象作为此方法的参数之一。
        c)、将Paging中的数据存入request中
    3、定义一个jsp,此页面利用存入request中的数据生成表单的隐藏字段和前一页、后一页等内容。使用时:
    在数据查询时,要求使用Paging作为参数,查询到结果后,将结果存入Paging
    所有分页的action从上面的抽象类继承,所有分页页面包含上面的jsp(必须包含在一个form元素中)。以上对jdbc、hibernate均适用,也不管你用不用、用哪个开源的MVC框架
      

  11.   

    我现在就是用的这个方法,不知道你有没发现,在对这个类的属性进行判断的时候,每一个action中的代码几乎都一摸一样。只是在查询条件上有不同。如何能对action中的这些重复代码进行更有效的封装呢?
      

  12.   

    我现在的麻烦就是无法将相同的抽象出来啊,处理页面记录的逻辑和封装javabean以及调用数据库操作的逻辑是混合在一起的。就像if的条件和他要执行的内容一样。请问如何分开呢?