分页介绍

参考:官方用户手册中的“分页组件”       
 分页思路服务器返回当前页的数据,总条数,再由js来生成分页标签。分页是配合服务器端来处理的, 不是存js做的分页。 因为如果数据量很大,比如有好几百页,性能很慢。 

分页组件参数要由服务器传过来targetType,totalCount,numPerPage,pageNumShown,currentPage 。框架会自动把下面的form中pageNum修改后,ajax重新发请求。下面这个form是用来存查询条件的

1
2
3
4
5
6
7
8
9
10
11
12
<form id="pagerForm" action="xxx" method="post">
      <input type="hidden" name="pageNum" value="1" />/><!--【必须】value=1可以写死-->
      <input type="hidden" name="numPerPage" value="20" /><!--【可选】每页显示多少条-->
      <input type="hidden" name="orderField" value="xxx" /><!--【可选】查询排序-->
      <input type="hidden" name="orderDirection" value="asc" /><!--【可选】升序降序-->
 
      <!--【可选】其它查询条件,业务有关,有什么查询条件就加什么参数。
      也可以在searchForm上设置属性rel=”pagerForm”,js框架会自动把searchForm搜索条件复制到pagerForm中 -->
      <input type="hidden" name="name" value="xxx" />
      <input type="hidden" name="status" value="active" />
      ……
</form
分页组件处理分页流程:
        1)  pagerForm中缓存了当前的查询条件,加上一个pageNum字段
        2)  点击分页时动态修改pageNum,重新提交pagerForm

分页组件使用方法: 
<div class="pagination" targetType="navTab" totalCount="200" numPerPage="20" pageNumShown="10" currentPage="1"></div>
测试方法,currentPage从1改为2,就是第2页了,把上面那句改为:
<div class="pagination" targetType="navTab" totalCount="200" numPerPage="20" pageNumShown="10" currentPage="2"></div>

参数说明:
                targetType: navTab或dialog,用来标记是navTab上的分页还是dialog上的分页 (dialog是弹窗窗口的模式,如果是dialog那么下面对应的targetType和onsubmit="return
navTabSearch(this);" 等都要修改(dialogSearch(this)))
                totalCount: 总条数        
                numPerPage: 每页显示多少条
                pageNumShown: 页标数字多少个
                currentPage: 当前是第几页
注意:
服务器端返回一个页面碎片,其中包括pagerForm, table, 和分页的div。只要把这个页面碎片组装好就行。

实际应用

前台(JSP):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<div class="pageHeader">
    <form id="pagerForm" rel="pagerForm" onsubmit="return navTabSearch(this);" action="user" method="post">
        <input type="hidden" name="pageNum" value="1" />
        <input type="hidden" name="numPerPage" value="${dwzPage.numPerPage}" />
        <input type="hidden" name="method" value="page" />
        <div class="searchBar">
            <table class="searchContent">
                <tr>
                    <td>
                        手机:<input type="text" name="phone" value="${phone}" />
                    </td>
                    <td>
                        名字:<input type="text" name="name" value="${name}" />
                    </td>
                    <td>
                        <select class="combox" name="status">
                            <option value="">用户状态</option>
                            <option value="0" <c:if test="${0 == status }">selected="selected"</c:if>>未激活</option>
                            <option value="1" <c:if test="${1 == status }">selected="selected"</c:if>>已激活</option>
                            <option value="2" <c:if test="${2 == status }">selected="selected"</c:if>>拒绝</option>
                            <option value="3" <c:if test="${3 == status }">selected="selected"</c:if>>取消关注</option>
                            <option value="4" <c:if test="${4 == status }">selected="selected"</c:if>>离职</option>
                            <option value="5" <c:if test="${5 == status }">selected="selected"</c:if>>黑名单</option>
                        </select>
                    </td>
                </tr>
            </table>
            <div class="subBar">
                <ul>
                    <li><div class="buttonActive"><div class="buttonContent"><button type="submit">检索</button></div></div></li>
                </ul>
            </div>
        </div>
    </form>
</div>
<div class="pageContent">
    <div class="panelBar">
        <ul class="toolBar">
            <li><a class="edit" href="user?method=editPage&uid={sid_user}" target="navTab" warn="请选择一个用户"><span>修改</span></a></li>
            <li class="line">line</li>
            <li><a title="确实要设置为管理员吗?" target="selectedTodo" rel="ids" href="user?method=setAdmin" class="add"><span>设置为管理员</span></a></li>
            <li class="line">line</li>
        </ul>
    </div>
    <table class="table" width="100%" layoutH="138">
        <thead>
            <tr>
                <th width="22"><input type="checkbox" group="ids" class="checkboxCtrl"></th>
                <th width="70">姓名</th>
                <th width="120">手机</th>
                <th width="80">用户状态</th>
                <th width="120">用户类型</th>
                <th >备注</th>
            </tr>
        </thead>
        <tbody>
            <c:forEach items="${dwzPage.list }" var="user" >
                <tr target="sid_user" rel="${user.id }">
                    <td><input name="ids" value="${user.id }" type="checkbox" ></td>
                    <td>${user.name }</td>
                    <td>${user.phone }</td>
                    <c:if test="${user.status==0 }">
                        <td>未激活</td>
                    </c:if>
                    <c:if test="${user.status==1 }">
                        <td>已激活</td>
                    </c:if>
                    <c:if test="${user.status==2 }">
                        <td>拒绝</td>
                    </c:if>
                    <c:if test="${user.status==3 }">
                        <td>取消关注</td>
                    </c:if>
                    <c:if test="${user.status==4 }">
                        <td>离职</td>
                    </c:if>
                    <c:if test="${user.status==5 }">
                        <td>黑名单</td>
                    </c:if>
                    <c:if test="${user.status>5 }">
                        <td>其他</td>
                    </c:if>
                    <c:if test="${user.type==0 }">
                        <td>管理员</td>
                    </c:if>
                    <c:if test="${user.type==1 }">
                        <td>普通用户</td>
                    </c:if>
                    <c:if test="${user.type>1 }">
                        <td>其他</td>
                    </c:if>
                     
                    <td>${user.remark }</td>
                     
                     
                </tr>
            </c:forEach>
        </tbody>
    </table>
    <div class="panelBar">
        <div class="pages">
            <span>显示</span>
             
            <select class="combox" name="numPerPage" onchange="navTabPageBreak({numPerPage:this.value})">
            <!-- <select class="combox" name="numPerPage" onchange="dialogPageBreak({numPerPage:this.value})"> -->
                <option value="10" <c:if test="${10 == dwzPage.numPerPage }">selected="selected"</c:if>>10</option>
                <option value="20" <c:if test="${20 == dwzPage.numPerPage }">selected="selected"</c:if>>20</option>
                <option  value="50" <c:if test="${50 == dwzPage.numPerPage }">selected="selected"</c:if>>50</option>
            </select>
            <span>条,共${dwzPage.totalCount}条</span>
        </div>
        <div class="pagination" targetType="navTab" totalCount="${dwzPage.totalCount}" numPerPage="${dwzPage.numPerPage }" pageNumShown="${dwzPage.pageNumShown }" currentPage="${dwzPage.currentPage }"></div>
        <%-- <div class="pagination" targetType="dialog" totalCount="${dwzPage.totalCount}" numPerPage="${dwzPage.numPerPage }" pageNumShown="10" currentPage="${dwzPage.pageNum }"></div> --%>
        <!-- <div class="pagination" targetType="navTab" totalCount="200" numPerPage="20" pageNumShown="10" currentPage="1"></div> -->
 
    </div>
</div>

分页实体类(DwzPage.java):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.qsachina.util;
 
import java.util.List;
 
public class DwzPage {
 
    private int currentPage = 1// 当前页数,默认第一页
    private int numPerPage = 20// 每页个数,默认20
    private int totalCount = 0// 总数,默认0
    private int pageNumShown = 10// 页标数字多少个,默认10
    private String orderField; // 排序方式
    private String orderDirection; // 升序降序
    private List<Object> list; // 返回的集合
 
    public int getNumPerPage() {
        return numPerPage;
    }
 
    public void setNumPerPage(int numPerPage) {
        this.numPerPage = numPerPage;
    }
 
    public int getTotalCount() {
        return totalCount;
    }
 
    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }
 
    public String getOrderField() {
        return orderField;
    }
 
    public void setOrderField(String orderField) {
        this.orderField = orderField;
    }
 
    public String getOrderDirection() {
        return orderDirection;
    }
 
    public void setOrderDirection(String orderDirection) {
        this.orderDirection = orderDirection;
    }
 
    public List<Object> getList() {
        return list;
    }
 
    public void setList(List<Object> list) {
        this.list = list;
    }
 
    public int getPageNumShown() {
        return pageNumShown;
    }
 
    public void setPageNumShown(int pageNumShown) {
        this.pageNumShown = pageNumShown;
    }
 
    public int getCurrentPage() {
        return currentPage;
    }
 
    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }
 
}

Servlet类(UserServlet.java):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 组装查询条件
String name = request.getParameter("name");
String phone = request.getParameter("phone");
String status = request.getParameter("status");
Map<String, String> params = new HashMap<>();
if(StringUtil.isNotEmpty(name)){ // name等参数可能是null 
    params.put("name", name.trim());
    request.setAttribute("name", name.trim());  // 查询条件设置回前台
}
if(StringUtil.isNotEmpty(phone)){
    params.put("phone", phone.trim());
    request.setAttribute("phone", phone.trim());  
}
if(StringUtil.isNotEmpty(status)){
    params.put("status", status.trim());
    request.setAttribute("status", status.trim());  
}
 
// 分页
String currentPage = request.getParameter("pageNum");
String numPerPage = request.getParameter("numPerPage");
 
DwzPage dwzPage = userService.getPageByParams(params,currentPage,numPerPage);
request.setAttribute("dwzPage", dwzPage);
request.getRequestDispatcher(page).forward(request, response);

Service类(UserService.java):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/**
 
 * @param params
 *            查询条件
 * @param currentPage
 *            当前页
 * @param numPerPage
 *            每页个数
 * @return 分页实体类
 */
public DwzPage getPageByParams(Map<String, String> params, String currentPage, String numPerPage) {
 
    DwzPage dwzPage = new DwzPage();
    if(StringUtil.isNotEmpty(currentPage)){
        dwzPage.setCurrentPage(Integer.parseInt(currentPage));
    }
    if(StringUtil.isNotEmpty(numPerPage)){
        dwzPage.setNumPerPage(Integer.parseInt(numPerPage));
    }
         
    List<Object> userList = new ArrayList<>();
    StringBuffer sbSQL = new StringBuffer(); // 查询的sql
    StringBuffer countSbSQL = new StringBuffer(); // 计算总个数sql
    sbSQL.append("select * from wb_user where 0=0 ");
    countSbSQL.append("SELECT COUNT(id) as count FROM wb_user where 0=0 ");
 
    Iterator<String> it = params.keySet().iterator();
    while (it.hasNext()) {
        String key = (String) it.next();
        sbSQL.append(" and ").append(key).append(" like '%").append(params.get(key)).append("%'");
        countSbSQL.append(" and ").append(key).append(" like '%").append(params.get(key)).append("%'");
    }
    sbSQL.append(" ORDER BY create_date ASC"); 
     
    // 分页
    sbSQL.append(" LIMIT ").append((dwzPage.getCurrentPage() - 1) * dwzPage.getNumPerPage()).append(",")
            .append(dwzPage.getNumPerPage());
 
    ResultSet rs = null;
    ResultSet rsCount = null;
    User user = null;
    try {
        rs = this.executeQuery(sbSQL.toString(), null);
        rsCount = this.executeQuery(countSbSQL.toString(), null);
        while (rs.next()) {
            user = new User();
            user.setId(rs.getLong("id"));
            user.setName(rs.getString("name"));
            user.setOpenId(rs.getString("openId"));
            user.setPhone(rs.getString("phone"));
            user.setStatus(rs.getInt("status"));
            user.setType(rs.getInt("type"));
            user.setRemark(rs.getString("remark"));
            user.setCreateDate(rs.getTimestamp("create_date"));
            user.setUpdateDate(rs.getTimestamp("update_date"));
            userList.add(user);
        }
         
        while (rsCount.next()) {
            dwzPage.setTotalCount(rsCount.getInt(1)); // 设置总数
        }
 
    catch (SQLException e) {
        e.printStackTrace();
    finally {
        this.close(conn, pstmt, rs);
    }
 
    dwzPage.setList(userList);
    return dwzPage;
}

密码 阿宓生日,链接:http://pan.baidu.com/s/1kTtRWW3 密码:tzpc

《DWZ笔记五》联动菜单等可以参考此博客http://heavengate.blog.163.com/blog/#m=0&t=1&c=fks_084070086081084067086082083095086086083064092087086070087


JUI/DWZ 分页 Servlet的更多相关文章

  1. 将j-ui(dwz)套用到thinkphp注意事项

    目前我用的 thinkphp 版本是  3.1.3 J-UI  dwz 版本好像是 1.4 现在 j-ui有 thinkphp的例子了,请尽量以他们原创为主,我这里都是一些自己搜集和自己钻研的土办法, ...

  2. RoadFlow工作流与JUI(DWZ)前端框架的集成

    此文只说明RoadFlow前端与JUI的集成,关于程序和接口请参照WebForm或MVC文档. 修改JUI配置文件dwz.frag.xml,此文件一般位于JUI根目录下. 2.修改文件js/dwz.n ...

  3. DWZ分页、排序失效小结

    1. 在视图文件中与分页相关的代码段 <form id="pagerForm" method="post" action="w_list.htm ...

  4. dwz分页实现分析

    dwz给我们提供了一个很好的列表UI 我对它的分析后将页面分为四个部分 <form id="pagerForm" method="post" action ...

  5. JUI/DWZ介绍、简单使用

    简介 由于开发的项目使用JUI,所以学习了. DWZ富客户端框架(jQuery RIAframework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架.(现在更名为JUI) 可 ...

  6. Java——分页 Servlet + Jsp+Jdbc 有点瑕疵

    1.创建数据库,插入多条数据 2.java连接DB 3.Person类: package com.phome.po; public class Person { private int id; pri ...

  7. dwz 分页 bug (选回 combox 第一个值时不执行 onchange)

    先看一下官方的测试: 官方的演示有两个 bug 一个是combox数字一直不变,二是当选回第一个值时不执行 onchange 事件. 经过firebug调试,这是一个bug,传到后台的参数没有得到及时 ...

  8. EasyUI表格DataGrid前端分页和后端分页的总结

    Demo简介 Demo使用Java.Servlet为后台代码(数据库已添加数据),前端使用EasyUI框架,后台直接返回JSON数据给页面 1.配置Web.xml文件 <?xml version ...

  9. 【Spring注解驱动开发】面试官:如何将Service注入到Servlet中?朋友又栽了!!

    写在前面 最近,一位读者出去面试前准备了很久,信心满满的去面试.没想到面试官的一个问题把他难住了.面试官的问题是这样的:如何使用Spring将Service注入到Servlet中呢?这位读者平时也是很 ...

随机推荐

  1. spring的@Transactional(rollbackFor=Exception.class)的使用

    Spring框架的事务基础架构代码将默认地只在抛出运行时和unchecked exceptions时才标识事务回滚. 也就是说,当抛出个RuntimeException 或其子类例的实例时.(Erro ...

  2. 吴恩达深度学习第1课第4周-任意层人工神经网络(Artificial Neural Network,即ANN)(向量化)手写推导过程(我觉得已经很详细了)

    学习了吴恩达老师深度学习工程师第一门课,受益匪浅,尤其是吴老师所用的符号系统,准确且易区分. 遵循吴老师的符号系统,我对任意层神经网络模型进行了详细的推导,形成笔记. 有人说推导任意层MLP很容易,我 ...

  3. 排序分析函数中对null的处理

    --排序分析函数中对null的处理 --分析:对于null在分析函数中是升序默认是nulls last,降序默认是nulls first.如果不指定排序,那么是升序 )); ,'测试1'); ,'测试 ...

  4. __str__与__repr__

    在讲解之前,我们先来了解下str和repr的区别:两者都是用来将数字,列表等类型的数据转化为字符串的形式.不同之处在于str更加类似于C语言中使用printf输出的内容,而repr输出的内容会直接将变 ...

  5. NLP系列(4)_朴素贝叶斯实战与进阶

    作者: 寒小阳 && 龙心尘 时间:2016年2月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/50629608 htt ...

  6. log4j日志记录级别是如何工作?

    级别p的级别使用q,在记录日志请求时,如果p>=q启用.这条规则是log4j的核心.它假设级别是有序的.对于标准级别它们关系如下:ALL < DEBUG < INFO < WA ...

  7. Objective-C构造方法

    Objective-C构造方法 构造方法:用来初始化的方法 创建对象的原理 之前我们创建对象的方式一直是使用[Xxx new] 但是使用 new 创建的对象,都是给我们默认做了初始化的. 有的时候,我 ...

  8. TV Metro界面(仿泰捷视频TV版)源码解析

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52822499 前言:上一篇介绍了 ...

  9. Dynamics CRM2016 Web API之通过实体的primary key查询记录(二)

    继续接上篇,还是通过primary key来查询数据,本篇介绍两个我个人比较喜欢的查询方式,一个是查询单个字段,一个是查询lookup关联实体中的属性字段. 先来看如何查询单个字段,只需要在url的最 ...

  10. 根据ccid取得账户,更改某段值再创建账户,返回新的ccid

    CREATE OR REPLACE PACKAGE cux_cuxaprebate_utl IS * =============================================== * ...