Pagination(分页) 从前台到后端总结

    困惑了我一段时间的网页分页,今天特地整理了一下我完成不久的项目。下面我要分享下我这个项目的分页代码,项目源代码:https://github.com/MuYunyun/ZHITWeb

一:效果图

下面我先上网页前台和管理端的部分分页效果图,他们用的是一套代码。

                                 

二:上代码前的一些知识点

此jQuery插件为Ajax分页插件,一次性加载,故分页切换时无刷新与延迟,如果数据量较大不建议用此方法,因为加载会比较慢。

描述参数值 
maxentries总条目数 必选参数,整数 
items_per_page 每页显示的条目数 可选参数,默认是10 
num_display_entries连续分页主体部分显示的分页条目数 可选参数,默认是10 
current_page 当前选中的页面 可选参数,默认是0,表示第1页 
num_edge_entries两侧显示的首尾分页的条目数可选参数,默认是0 
link_to分页的链接 字符串,可选参数,默认是"#" 
prev_text “前一页”分页按钮上显示的文字字符串参数,可选,默认是"Prev" 
next_text “下一页”分页按钮上显示的文字 字符串参数,可选,默认是"Next" 
ellipse_text 省略的页数用什么文字表示可选字符串参数,默认是"…" 
prev_show_always是否显示“前一页”分页按钮布尔型,可选参数,默认为true,即显示“前一页”按钮 
next_show_always 是否显示“下一页”分页按钮 布尔型,可选参数,默认为true,即显示“下一页”按钮 
callback 回调函数 默认无执行效果 
三:前台代码部分
复制代码
 1 var pageSize =6;     //每页显示多少条记录
 2 var total;           //总共多少记录
 3  $(function() {
 4     Init(0); //注意参数,初始页面默认传到后台的参数,第一页是0;    
 5         $("#Pagination").pagination(total, {   //total不能少        
 6              callback: PageCallback,            
 7              prev_text: '上一页',             
 8              next_text: '下一页',              
 9              items_per_page: pageSize,              
10              num_display_entries: 4,        //连续分页主体部分显示的分页条目数
11              num_edge_entries: 1,           //两侧显示的首尾分页的条目数 
12          });             
13         function PageCallback(index, jq) {     //前一个表示您当前点击的那个分页的页数索引值,后一个参数表示装载容器。  
14              Init(index);      
15         }
16     });
17  
18  function Init(pageIndex){      //这个参数就是点击的那个分页的页数索引值,第一页为0,上面提到了,下面这部分就是AJAX传值了。
19      $.ajax({
20         type: "post",
21       url:"../getContentPaixuServ?Cat="+str+"&rows="+pageSize+"&page="+pageIndex,
22       async: false,
23       dataType: "json",
24       success: function (data) {
25             $(".neirong").empty();
26 /*             total = data.total; */
27             var array = data.rows;
28             for(var i=0;i<array.length;i++){
29                 var info=array[i];
30                 
31                 if(info.refPic != null){
32                 $(".neirong").append('<dl><h3><a href="'+info.CntURL+'?ContentId='+info.contentId+'" title="'+info.caption+'" >'+info.caption+'</a></h3><dt><a href="sjjm.jsp?ContentId='+info.contentId+'" title="'+info.caption+'" ><img src="<%=basePathPic%>'+info.refPic+'" alt="'+info.caption+' width="150" height="95""></a></dt>  <dd class="shortdd">'+info.text+'</dd><span>发布时间:'+info.createDate+'</span></dl>') 
33                 }else{
34                 $(".neirong").append('<dl ><h3><a href="'+info.CntURL+'?ContentId='+info.contentId+'" title="'+info.caption+'" >'+info.caption+'</a></h3><dd class="shortdd">'+info.text+'</dd><span>发布时间:'+info.createDate+'</span></dl>');
35                 };
36          }       
37       },
38       error: function () {
39           alert("请求超时,请重试!");
40       }
41     });  
42 };
复制代码

 

四:后台部分(java)

我用的是MVC 3层模型

servlet部分:(可以跳过)

复制代码
 1     public void doPost(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {
 3 
 4         response.setContentType("text/html;charset=utf-8");
 5         PrintWriter out = response.getWriter();
 6         //获取分页参数
 7         String p=request.getParameter("page"); //当前第几页(点击获取)
 8         int page=Integer.parseInt(p);
 9         
10         String row=request.getParameter("rows");    //每页显示多少条记录
11         int    rows=Integer.parseInt(row);
12         
13         String s=request.getParameter("Cat");   //栏目ID
14         int indexId=Integer.parseInt(s);
15         JSONObject object=(new ContentService()).getContentPaiXuById(indexId, page, rows);        
16         out.print(object);
17         out.flush();
18         out.close();
19     }
复制代码

Service部分:(可以跳过)

复制代码
    public JSONObject getContentPaiXuById(int indexId, int page, int rows) {
        JSONArray array=new JSONArray();
        List<Content>contentlist1=(new ContentDao()).selectIndexById(indexId);
        List<Content>contentlist=paginationContent(contentlist1,page,rows);
        for(Content content:contentlist){
            JSONObject object=new JSONObject();
            object.put("contentId", content.getContentId());
            object.put("caption", content.getCaption());
            object.put("createDate", content.getCreateDate());
            object.put("times", String.valueOf(content.getTimes()));
            object.put("source", content.getSource());
            object.put("text", content.getText());
            object.put("pic", content.getPic());
            object.put("refPic", content.getRefPic());
            object.put("hot", content.getHot());
            object.put("userId", content.getAuthorId().getUserId());
            int id = content.getAuthorId().getUserId();
            String ShowName = (new UserService()).selectUserById(id).getString("ShowName");
            object.put("showName", ShowName);
            array.add(object);
            
        }
        JSONObject obj=new JSONObject();
        obj.put("total", contentlist1.size());
        obj.put("rows", array);
        return obj;
    }
复制代码

获取出每页的的起止id(这部分是重点),同样写在Service中,比如说假设一页有6条内容,那么第一页的id是从1到6,第二页的id是从7到12,以此类推

复制代码
 1     //获取出每页的内容 从哪个ID开始到哪个ID结束。
 2     private List<Content> paginationContent(List<Content> list,int page,int rows){
 3         List<Content>small=new ArrayList<Content>();
 4         int beginIndex=rows*page;       //rows是每页显示的内容数,page就是我前面强调多次的点击的分页的页数的索引值,第一页为0,这样子下面就好理解了!
 5         System.out.println(beginIndex);
 6         int endIndex;
 7         if(rows*(page+1)>list.size()){   
 8             endIndex=list.size();        
 9         }
10         else{
11             endIndex=rows*(page+1);
12         }
13         for(int i=beginIndex;i<endIndex;i++){  
14             small.add(list.get(i));  
15         }  
16         return small;
17     }
复制代码

Dao层:(可以跳过)

复制代码
 1      public List selectIndexById(int indexId){
 2          List<Content>list=new ArrayList<Content>();
 3          try{
 4              conn = DBConn.getCon();
 5              String sql = "select * from T_Content,T_User where T_Content.AuthorId = T_User.UserId and CatlogId=? order by CreateDate desc";
 6              pstm = conn.prepareStatement(sql);
 7              pstm.setInt(1, indexId);
 8              rs = pstm.executeQuery();
 9              SimpleDateFormat ff=new SimpleDateFormat("yyyy年MM月dd日 hh时mm分");
10              while(rs.next()){
11                 Content content = new Content();
12                 content.setContentId(rs.getInt("ContentId"));
13                  content.setCaption(rs.getString("Caption"));
14                  content.setCreateDate(f.format(rs.getTimestamp("CreateDate")));
15                  content.setTimes(rs.getInt("Times"));
16                  content.setSource(rs.getString("Source"));
17                  content.setText(rs.getString("Text"));
18                  content.setPic(rs.getString("Pic"));
19                  content.setRefPic(rs.getString("RefPic"));
20                  content.setHot(rs.getInt("Hot"));
21                  User user = new User();
22                  user.setUserId(rs.getInt("UserId"));
23                  content.setAuthorId(user);
24                  Catlog catlog = new Catlog();                //CntURL待开发
25                  catlog.setCatlogId(rs.getInt("CatlogId"));
26                  content.setCatlog(catlog);
27                  list.add(content);
28              }
29          }catch(Exception e){
30              e.printStackTrace();
31          }finally{
32              DBConn.closeDB(conn, pstm, rs);
33          }
34          return list;
35      }
复制代码

 

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Pagination分页)是一种常见的网页设计和开发技术,通常用于在列表或搜索结果等长文本内容中显示大量数据,以提高用户体验和页面性能。它将长文本内容分割成多个页面,并允许用户通过点击页面导航按钮或输入页面数字来浏览这些页面。通常,每个页面显示一定数量的项目,例如每页显示10个项目。分页还可以包括一些额外的功能,例如搜索框、排序选项和筛选器,以帮助用户更轻松地浏览和查找所需的内容。 ### 回答2: pagination分页)是指将大量内容或数据按照一定规则划分为多个页面展示,以方便用户浏览和管理。在网页设计和数据库查询中,分页是一种常见的技术手段。 分页的优势在于能够对大量内容进行合理的划分和呈现,避免了用户一次性加载大量数据而导致页面加载速度变慢的问题。同时,分页还可以有效地减小服务器负载,提升系统性能和响应速度。 分页的实现方式主要依靠服务器端和客户端共同配合完成。服务器端通过数据库查询语句的limit和offset来控制返回的数据范围,从而实现数据的分页查询。客户端则通过页面上的分页导航栏或者滚动加载等方式将分页数据展示给用户。 分页通常分为两种基本类型:基于页码的分页和基于滚动的分页。基于页码的分页是指通过点击页码导航栏来切换不同页码对应的数据页面。基于滚动的分页则是指当用户滚动至页面底部时,自动加载下一页数据。 在分页设计中,需要考虑几个关键因素。首先是每页展示的数据量,过多会导致页面加载速度变慢,过少则会增加用户切换页面的频率。其次是分页导航的设计,需清晰明了,方便用户直观操作。再次是当前页码的显示,以及提供跳转至指定页码的功能,以方便用户快速定位到所需页面。 总的来说,pagination分页)是一种有效管理和展示大量内容或数据的技术手段,通过合理的分页设计,可以提高用户体验和系统性能。 ### 回答3: 分页pagination)是一种常见的网页设计技术,用于将大量内容按照一页一页的方式分隔显示,从而提供更好的用户体验。 分页的作用在于将长篇的文章、产品列表或搜索结果等大量信息分割成若干页面,使用户能够逐页浏览,提高浏览效率。通常,一页显示一定数量的内容,用户可以通过点击页码或上一页/下一页按钮来切换页面。在每一页的底部,还会提供快速跳转到指定页码的选项。 分页技术的优势在于它可以减轻页面加载的负担,提高页面加载速度。当页面内容过多时,如果采用一次性加载全部内容的方式,可能导致页面加载时间过长,并且在网速较慢的情况下可能会影响用户的体验。而采用分页技术,只需加载当前页面的内容,可以有效减少等待时间,提升用户的感知满意度。 分页还可以增加网页内部链接和导航的可用性。通过在页面底部提供跳转链接和前后页切换按钮,用户可以更方便地导航到其他页面,从而实现对内容的快速浏览和检索。 需要注意的是,分页的设计要合理,不能过多地划分页面,以免给用户带来翻页频繁、体验不佳的感觉。同时,应该提供直观明了的页面导航元素,为用户提供良好的交互体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值