`

一个常用的页面分页插件实例

 
阅读更多

一:(页面分页控件)页面head标签中引进:   

 

<script type="text/javascript" src="../libs/jquery.pagination_2/jquery.pagination.js"></script>

<link href="../libs/jquery.pagination_2/pagination.css" rel="stylesheet" type="text/css" media="all" />

 

html语句:

<div id="pagination" style="margin-top:5px;float: right;"></div>

 

   //分页
    var pageSize = 20;
    var pageIndex = 0;

    $(function(){
        loadFirstNode();
        search(true);
    });

    function search(resetPageIndex){
        resetPageIndex = resetPageIndex || false;
        if (resetPageIndex)
            pageIndex = 0;

        var url= "/s.do?obj=catalogDaoImpl";
        var nodeNamex = $("#nodeNamex").val();
        var i=4;//允许从叶子节点开始搜索
        while((code=$("#"+i+"Catalog").val())=="" && i>0){
            i--;
        }
        sendJsonrpcRequest


(url,"POST","getPagedList",{  //封装好的jsonrpc方式



                    query:{
                        "title":$("#nodeNamex").val(),
                        "lastOperator":$("#modifyPerson").val(),
                        "reservedInt":0,
                        "code":code,
                        "orderBy":"lastUpdateTime",
//                      "pageSize":20,  //等待liusan修复abstractDao代码  //改map文件中的"pageSize"为"limit"
                        "reservedField":"common_catalog"//传入表名
                    },
                    pageSize:pageSize,
                    pageIndex:pageIndex
                },null,
                function(data){
                    $("#pagination").show();
                    //返回的data是一个objct,包含一个list(取前面的n个记录用于本页显示)和count(总记录数)
                    nodeNamex = $("#nodeNamex").val();
                    for(var i=0;i<data.list


.length;i++){  //返回的data是根据数据库查询得到的一个PagedList<Catalog>
                                                                             //public class PagedList<T> {
	                                                                      //                     private int count;
                                                                              //            	private Collection<T> list; }



                  getCatalogPath(data.list[i]);

                        //关键字着色
                        data.list[i].title=data.list[i].title.replaceAll(nodeNamex,"<span style='color: red;'>"+nodeNamex+"</span>");
                    }
                    if (pageIndex == 0)
                        initPagination(data.count);

                    $("#mainbody").html("");
                    //alert(TrimPath.processDOMTemplate("template_jst_list", data));
                    if(data.list.length!=0){
                        $("#mainbody").append(
                                TrimPath.processDOMTemplate("template_jst_list",data));
                    }else{
                        $("#mainbody").append("<tr id='noData'><td colspan='5' align='center'><strong style='color: red'>没找到数据!</strong></td></tr>");
                        $("#pagination").hide();
                    }
                },null);

    }

    function getCatalogPath(p){
        //alert("GetCatalogPath");
        var url= "/s.do?obj=catalogDaoImpl";
        sendJsonrpcRequestSync(url,"POST","getCatalogPath",{code:p.code},null,
                function(data){
                    p.pathData=data;
                },null);
    }


    function pageselectCallback(page_index, jq) {
        pageIndex = page_index;
        search();
        return false;
    }

    function initPagination(count) {
        $("#pagination").pagination(count, {
            callback : pageselectCallback,
            prev_text : "上一页",
            next_text : "下一页",
            items_per_page : pageSize
            // Show only one item per page
        });
    }

 其中,sendJsonrpcRequest(。。)是对jsopnrpc的一个请求的封装:

function sendJsonrpcRequest(url, httpMethod, method, params, extraParams, callback, errorCallback) {	
	//jsonrpc请求参数
	var o = createJsonRpcObject(method,params);
	
	sendJsonrpcRequestX(url,httpMethod,o,callback,errorCallback, true);
}

function createJsonRpcObject(method,params){
	var o = {};
	o.id = 1;
	o.method = method;
    o.params = params;
	o.jsonrpc = "2.0";
	
	return o;
}

function sendJsonrpcRequestX(url, method, jsonrpcRequestObject, callback, errorCallback, async){
	var d = {};	
	d["jsonrpcContent"] = JSON.stringify(jsonrpcRequestObject);
	d["rnd"] = Math.random();
	
	if(!$.browser.msie)//2012-08-14,非IE增加charset=utf-8参数,表示服务器要转码。解决IE下,提交的+号,在服务器端被utf8转换导致丢失的问题
		d = "charset=utf-8&jsonrpcContent="+ encodeURIComponent(encodeURIComponent( d.jsonrpcContent )) + "&rnd=" + d.rnd;
	
	$.ajax({
		async : async, //2012-08-13
		type : method,//"GET",
		url : url,		
		//contentType: "application/x-www-form-urlencoded; charset=gbk", 
		dataType : "json",
		data : d,
		
		//2012-08-10 上面的data两次encodeURIComponent,服务端用java.net.URLDecoder.decode(request.getParameter("jsonrpcContent"), "utf-8");
		
		success : function(data) {
			if (data.error) {
				if (errorCallback)
					errorCallback(data.error);
				else
					alert(data.error.message);
			} else if (callback){
				if($.isArray(jsonrpcRequestObject))
					callback(data); //2012-04-19增加【|| data】,解决批量请求的问题
				else
					callback(data.result);
			}
		},
		error : function(data){//2012-02-15 by liusan.dyf
			//alert("jsonrpc error");
		}
	});
}

  web.xml中有一个配置,对请求进行过滤截获:

  	<filter>
        <filter-name>jsonRpcFilter

</filter-name>
        <filter-class>com.taobao.riskm.filter.JsonRpcFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>jsonRpcFilter</filter-name>
        <url-pattern>/s.do</url-pattern>
    </filter-mapping>

 JsonRpcFilter类中就有对jsonrpc的一个请求处理过程:

 

public class JsonRpcFilter implements Filter {
	Map<String, Object> objects = new HashMap<String, Object>();

	private static final String DEFAULT_OBJ_KEY = "kv";
	private static final String X = "$userName$";

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		//提示信息不包括堆栈信息
		JsonRpcService.outputErrorStackTrace(false);
		// 注册对象
		objects.put(DEFAULT_OBJ_KEY, SpringBeanUtil.getBean("keyValueDao"));
		objects.put("catalogDaoImpl", SpringBeanUtil.getBean("catalogDao"));
		objects.put("httpRequest", new HttpRequest());// 2012-02-20
//		objects.put("6catalogDao", SpringBeanUtil.getBean("6catalogDao"));// 2012-05-17

		// 注册类的方法
		JsonRpcService.registerAllMethods(objects.get(DEFAULT_OBJ_KEY)
				.getClass());
		JsonRpcService.registerAllMethods(CatalogDaoImpl.class);// 2012-02-27
		JsonRpcService
				.registerAllMethods(objects.get("httpRequest").getClass());
		JsonRpcService.registerAllMethods(CounterDaoImpl.class);// 2012-03-05


		// 建立隐射 2012-02-28
		// JsonRpcService.mapTo(CatalogDaoImplWrapper.class,
		// CatalogDaoImpl.class);

		// // 测试
		// KeyValueService s = (KeyValueService) o;
		// System.out.println("s.getKeyValueClusterCaller()!=null:"
		// + (s.getKeyValueClusterCaller() != null));
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// System.out.println(json);
		String json = request.getParameter("jsonrpcContent");
	    // 用参数指定是否转码 2012-08-14
	    if ("utf-8".equals(request.getParameter("charset")))
	        json = java.net.URLDecoder.decode(json, "utf-8");

		if (!tools.Validate.isBlank(json)) {
			tools.web.ServletUtil.addJsonContentType(
					(HttpServletResponse) response, "GBK");

			// 2012-04-16 by liusan.dyf
			User u = Global.getCurrentUser();
			if (u != null) {
				json = tools.StringUtil.replaceAll(json, X, u.getUserName());
			}

			// key
			String objKey = request.getParameter("obj");
			if (tools.Validate.isBlank(objKey))
				objKey = DEFAULT_OBJ_KEY;

			// 得到调用的对象
			Object invokeObject = null;

			invokeObject = objects.get(objKey);

			// 开始调用
			if (invokeObject != null) {
				String result = JsonRpcService.invokeToString(invokeObject,
						json, true);
				// JsonRpcService.invoke(o, json, true);
				response.getWriter().append(result);
				return;
			} else {
				String error = JsonRpcService

.toJsonRpcErrorResult(0, -32602,
						"错误的objKey");
				response.getWriter().append(error);
			}
			// System.out.println(result);
		} else
			chain.doFilter(request, response);
	}

  JsonRpcService类中的大致处理方法:

private static final ObjectMapper jsonMapper;


	static {
		jsonMapper = Json.getObjectMapper();
	}

	public static String invokeToString(Object obj, String request,
			boolean autoRegister) {
		InvokeResultList invokeResults = invokeBatch(obj, request, autoRegister);// 执行批量请求
		List<String> jsonStringList = new ArrayList<String>(invokeResults
				.getResults().size());

		try {
			List<SingleInvokeResult> list = invokeResults.getResults();

			// 循环拼接json
			for (SingleInvokeResult item : list) {
				if (item.getResult() instanceof JsonRpcError) {
					jsonStringList.add(item.getResult().toString());// 响应error
				} else {// 正确的响应
					Map<String, Object> m = toJsonRpcResultMap(item.getId(),
							item.getResult());
					jsonStringList.add(jsonMapper.writeValueAsString(m));
				}
			}

			// 输出json
			if (!invokeResults.isBatch())
				return jsonStringList.get(0);
			else {
				int left = jsonStringList.size();
				StringBuilder builder = new StringBuilder();

				builder.append("[");
				for (String s : jsonStringList) {
					left--;
					builder.append(s);
					if (left > 0)
						builder.append(",");
				}

				builder.append("]");
				return builder.toString();
			}
		} catch (Exception e) {
			LOGGER.error(e);
		}

		return null;
	}

  废话有点多,下面兄弟我直接上了个分页的能亲眼看见的例子好了,方便大家在web项目开发的过程中参考使用,对你有帮助的时候也顶一下(见附件,如果附件没有了就给我发站内信)。

   二: 对web开发,在分页的时候需要把从数据库查到的list数据在页面中也table的方式展现出来,这是又可以用到一个模版插件:

<script type="text/javascript" src="../libs/template/trimpath-template.js"></script>

该插件在附件中已经含有。

其使用方式:

<html>
  <head>
    <script type="text/javascript" src="../libs/template/trimpath-       template.js"></script>
   </head>
  <body>
           <div class="board">
                <table class="niceTab" id="mainBody">
                </table>
            </div>
       <div id="pagination" style="margin-top:5px;float: right;"></div>
  
  。。。
  <textarea name="template_jst_list" id="template_jst_list"
          style="display: none;" cols="0" rows="0">
    <tr>
        <th scope="col">节点名称</th>
        <th scope="col">类型路径</th>
        <th scope="col">修改者</th>
        <th scope="col">修改时间</th>
        <th scope="col">操作</th>
    </tr>
    {for p in list}
    <tr id="tr_@{hashCode(p.id)}">
        <!--<td class="name1">@{p.code}</td>-->
        <td class="name2"><a href="../casedetails.action?riskId=@{p.id}" target="_self">@{p.title}</a></td>
        <td class="name3">@{p.pathData}</td>
        <td class="name4">@{p.lastOperator}</td>
        <td class="name6">@{toDate(p.lastUpdateTime)}</td>
        <td class="name5"><a href="../casemodify.action?riskId=@{p.id}" target="_self">编辑</a>&nbsp;&nbsp;<span onclick="delCase('@{p.id}')"><a href="#">删除</a></span></td>
    </tr>
    {/for}
</textarea>
</body>
</html>

<script type="text/javascript">
    function showTable(){
   $. ajax(
    ajax的post参数和返回参数的xxx的配置,如果没有设置返回的参数类型的限制,就会按照java中设置的response写入的MIME类型。
    function(data){
    $("#pagination").show();
    $("#mainBody").html("");
                    if(data.list.length!=0){

                        $("#mainBody").append(
                                    TrimPath.processDOMTemplate
("template_jst_list", data));
                    }else{
                        $("#mainBody").append("<tr id='noData'><td colspan='5' align='center'><strong style='color: red'>没找到数据!</strong></td></tr>");
                        $("#pagination").hide();
                    }
    });
    }

    // 转换时间
    function toDate
(timestamp){
        var d = new Date(timestamp);
        return d.format("yyyy-MM-dd hh:mm");
//      return d.getFullYear() + "-" + (d.getMonth()+1) + "-" + d.getDate()+" "+d.getHours()+":"+d.getMinutes();
    }
</script>

 其中有一个时间转换的js函数toDate(。。)也很常用。

用一个封转好的jsonrpc的方式删除表格中的某一条具体值:

 

    function delCase(code){
        var url = "/s.do?obj=catalogDaoImpl";
        if(!confirm("亲,您确定删除这个节点?")) return;

        sendJsonrpcRequestSync(url,"POST","deleteItemOnCondition",{catalogCode:code},
                null,function(data){
                    if(data==1){
                        alert("该风险下有附件,删除失败!");
                    }else if(data==2){
                        alert("该风险下有关联处罚案例库,删除失败!");
                    }else{
                        $("#tr_"+hashCode
(code)).remove();
                    }
                },null);
    }

  上面的hashCode函数在util.js中已经定义,util.js中定义了很多有用的js函数,可以在需要的时候引用,能增加开发的效率(已经在附件中包含)。

 

 

 

 

 

 

分享到:
评论

相关推荐

    jquery分页插件结合jsp实例

    jquery分页插件结合jsp实例 有什么不晓得的加Q 359709421

    bootstrap-table后端分页功能完整实例

    本文实例讲述了bootstrap-table后端分页功能。分享给大家供大家参考,具体如下: 使用bootstrap-table实现后台分页 插件资源点击此处本站下载。 引用以下css &lt;link rel="stylesheet" href="../plugins/...

    jsp分页插件带演示实例说明

    1、此插件将数据库查询和分页操作分离开,在查询的时候,不管采用什么设计模式,都必须实现 PageListener接口。 2、接口里面包含四个方法 (1)、public List doSelect(int recordStart,int sizePage),参数...

    jspPageControlor分页插件11.2版

    分页插件使用案例(以一个问吧系统为例,详细讲解插件的使用方法); &lt;br&gt;五、运行配置 &lt;br&gt;1、运行环境为jdk(1.4以上),Tomcat(5.0以上),mysql(5.0.x); 2、运行时须改动database.properties,把数据库...

    jqprint可分页打印页面内容

    利用jquery插件jqprint打印当前页面的标签内容,自动换页,包含jar包,js,java代码。

    封装好直接使用的jsp分页插件

    java web应用分页组件,可适用于jsp+servlet或s2sh,配置非常简单,引入二行代码即可,内置详细的操作配置文档和jar包及实例文件,未考虑性能优化,对性能要求很高的高手请自行测试或绕行

    pager-taglib 分页扩展实例

    在实际的开发中post方式的提交比较常见,本人做了一个比较通用的基于post方式的一个应用。主要实现一下功能: 1.添加输入跳转、每页记录数选择功能 2.显示数据与struts2结合实现各行变色 3.基于jquery.form插件的无...

    "BeeGo框架实现的一个WEB应用实例"数据库MYSQL脚本

    不好意思,"BeeGo框架实现的一个WEB应用实例"没有附带数据库,特此补正! 本应用是用BeeGo框架进行的一个WEB应用快速开发,是一个在生产环境实际运行的商业软件。 适用数据库MySQL,详细配置请参阅conf\global\app....

    angularjs+bootstrap实现自定义分页的实例代码

    目前在做一个java web页面,没有使用到框架的分页,所以需要自己实现分页,就想到了用angularjs来实现分页,数据通过ajax从后台获取。 插件 百度了一下,看到一个比较漂亮的插件,就直接用该插件,并修改了部分细节...

    JSP基于Bootstrap分页显示实例解析

    首先介绍一款简单利落的分页利器:bootstrap-paginator,可以参考:Bootstrap Paginator分页插件使用方法详解 这篇文章进行学习。 效果截图:   GitHub官方下载地址:...

    BeeGo框架实现的一个WEB应用实例

    前端采用了amazeui制作工作台页面,标准的左边菜单栏右边工作页面---一个适合各种此类应用的快速开发模板。其他还有ztree树形组件、echarts百度报表插件、paging分页组件。。 实现了几个单表的CRUD操作的几个模块,...

    22-10-06-05_SqlSugarAcquaintance(初识SqlSugarCore之内置逻辑分页)

    DataTables表格中其它的索引对应的页中并没有绑定数据,只有在点击索引后,后台方法会对内存逻辑分页,根据该索引值进行操作后,把指定1逻辑页面中的数据提供给DataTables插件,其后DataTables插件会把指定逻辑页面...

    jQuery DataTables插件自定义Ajax分页实例解析

    园友是做前端的,产品经理要求他使用jQuery DataTables插件显示一个列表,要实现分类效果。 后端的分页接口已经写好了,不涉及条件查询,需要传入页码(pageNo)和页面显示数据条数(pageSize),显示相应页的显示记录,...

    超好用的jQuery分页插件jpaginate用法示例【附源码下载】

    jpaginate是一个自带滑动动画效果的jQuery分页插件,用户可以通过单击或只是悬停在箭头上的使页码滑动显示。 你可以用下面的方式调用插件: $(elementID).paginate() 您可以通过一下属性来配置插件: count:页面...

    "BeeGo框架实现的一个WEB应用实例"所需MYSQL数据库脚本

    不好意思,"BeeGo框架实现的一个WEB应用实例"没有附带数据库,特此补正! 本应用是用BeeGo框架进行的一个WEB应用快速开发,是一个在生产环境实际运行的商业软件。 适用数据库MySQL,详细配置请参阅conf\global\app....

    JAVA上百实例源码以及开源项目源代码

     WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书  Java局域网通信——飞鸽传书源代码,大家都知道VB...

    真正的JAVA快速开发插件

    插件优势: 1. 用插件自动建表,表之间的联系。 2. 自动生成DAO,BIZ,ACTION,JSP增删改查页面。 3. 项目负责人员只需要设计好数据库中有哪些表,表里有...5. 所有数据库表的简单增删改查以及分页功能页面的自动生成。

    wordpress-load-more:WordPress的同一页面分页按钮

    单击该按钮将按照WordPress管理员中“最大帖子数”选项设置的间隔将帖子的下一个“页面”添加到页面底部。 将根据要添加的剩余帖子数自动调整要更新的帖子数,并且当没有更多帖子要加载时,该按钮将自动隐藏。

    JQuery+Ajax无刷新分页的实例代码

    实现原理很简单,使用了jquery.pagination这个插件,每当点击页码时异步去服务器去取该页的数据,简单介绍如下: 一、数据库表结构:很简单 就四个字段 分别是News_id News_title News_time News_readtimes ...

Global site tag (gtag.js) - Google Analytics