• DWZ分页、排序失效小结


    1. 在视图文件中与分页相关的代码段

    1 <form id="pagerForm" method="post" action="w_list.html">
    2     <input type="hidden" name="pageNum" value="1" />
    3     <input type="hidden" name="numPerPage" value="<%= Model.numPerPage %>" />
    4     <input type="hidden" name="orderField" value="<%= param.orderField %>" />
    5     <input type="hidden" name="orderDirection" value="<%= param.orderDirection %>" />
    6 </form>
     1 <div class="panelBar" >
     2         <div class="pages">
     3             <span>显示</span>
     4             <select name="numPerPage" onchange="navTabPageBreak({numPerPage:this.value})">
     5                 <option value="20">20</option>
     6                 <option value="50">50</option>
     7                 <option value="100">100</option>
     8                 <option value="200">200</option>
     9             </select>
    10             <span>条,共200条</span>
    11         </div>
    12         
    13         <div class="pagination" targetType="navTab" totalCount="200" numPerPage="20" pageNumShown="10" currentPage="2"></div>
    14 
    15     </div>
    16 
    17 </div>

    页面如下图所示:

    分页或排序动作会调用到 dwz.ajax.js 中的两个关键脚本方法:

     1 /**
     2  * 处理navTab中的分页和排序
     3  * targetType: navTab 或 dialog
     4  * rel: 可选 用于局部刷新div id号
     5  * data: pagerForm参数 {pageNum:"n", numPerPage:"n", orderField:"xxx", orderDirection:""}
     6  * callback: 加载完成回调函数
     7  */
     8 
     9 function dwzPageBreak(options){
    10     var op = $.extend({ targetType:"navTab", rel:"", data:{pageNum:"", numPerPage:"", orderField:"", orderDirection:""}, callback:null}, options);                    
                        // 参数rel来自于上面第二段代码13行的一个可选属性,用于指定当一个页面内存在有多个表单时,分页操作作用的对象
    11 var $parent = op.targetType == "dialog" ? $.pdialog.getCurrent() : navTab.getCurrentPanel();
                        // 获取到的 $parent 对象为包含 id=“pagerForm” 的 Form 表单
    12 13 if (op.rel) { 14 var $box = $parent.find("#" + op.rel); 15 var form = _getPagerForm($box, op.data); 16 if (form) { 17 $box.ajaxUrl({ 18 type:"POST", url:$(form).attr("action"), data: $(form).serializeArray(), callback:function(){ 19 $box.find("[layoutH]").layoutH(); 20 } 21 }); 22 } 23 } else { 24 var form = _getPagerForm($parent, op.data); 25 var params = $(form).serializeArray(); 26 27 if (op.targetType == "dialog") { 28 if (form) $.pdialog.reload($(form).attr("action"), {data: params, callback: op.callback}); 29 } else { 30 if (form) navTab.reload($(form).attr("action"), {data: params, callback: op.callback}); 31 } 32 } 33 }
     1 /**
     2  * 
     3  * @param {Object} args {pageNum:"",numPerPage:"",orderField:"",orderDirection:""}
     4  * @param String formId 分页表单选择器,非必填项默认值是 "pagerForm"
     5  */
     6 function _getPagerForm($parent, args) {
     7     var form = $("#pagerForm", $parent).get(0);
     8 
     9     if (form) {
    10         if (args["pageNum"]) form[DWZ.pageInfo.pageNum].value = args["pageNum"];
    11         if (args["numPerPage"]) form[DWZ.pageInfo.numPerPage].value = args["numPerPage"];
    12         if (args["orderField"]) form[DWZ.pageInfo.orderField].value = args["orderField"];
    13         if (args["orderDirection"] && form[DWZ.pageInfo.orderDirection]) form[DWZ.pageInfo.orderDirection].value = args["orderDirection"];
    14     }
    15     
    16     return form;
    17 }

    这次在工作中,分页失效的主要原因就是没有将分页排序的几个相关的隐藏表单元素放在 id="pagerForm" 导致在第一个脚本方法中并没有获取到正确的 Jquery 对象 $parent ,从而传递到第二个方法时获取到的 form 变量值为 undefined 

  • 相关阅读:
    开发金额处理BigDecimal
    Strtuts2.3.15 bug ,可以远程执行命令
    java 获取properies资源信息
    获取程序运行所在ip
    JVM虚拟机内存和String 类型深入
    数据库表结构上下文
    properties配置文件实现DBManager
    查询功能的包装类
    通过反射生成类的utils
    jdbc反射操作
  • 原文地址:https://www.cnblogs.com/ImaY/p/4036154.html
Copyright © 2020-2023  润新知