- 浏览: 64131 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (46)
- jvm调优相关 (3)
- java编程语言 (6)
- jQuery &css (11)
- hsf ;spring (3)
- Eclipse 相关 (1)
- 缓存 jvm相关 (2)
- 文件处理 (7)
- html post请求乱码问题 (0)
- java 表单字符处理问题 (2)
- ibitas相关 (2)
- TCP/IP相关 (1)
- 网站架构 (1)
- 编码规范和代码重构 (2)
- spring架构&java web框架原理 (2)
- java web日志相关 (1)
- 网络编程 (1)
- 其他收藏 (0)
- iReport;报表 (0)
- 包和类加载冲突 (0)
- 数据库相关 (1)
- 心得;分享;其他 (1)
- web安全相关 (0)
- 线上问题总结和处理 (0)
- mtee (0)
- xu (0)
- 可心一点 (0)
- 爬虫 (0)
最新评论
一:(页面分页控件)页面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> <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函数,可以在需要的时候引用,能增加开发的效率(已经在附件中包含)。
- 分页控件实例.rar (44.9 KB)
- 下载次数: 6
发表评论
-
JSESSION失效问题
2012-11-16 22:17 875问题:在开发环境下的页面进行数据查询时,自动跳到后台权限控制登 ... -
jquery中在一个页面中弹出编辑对话框的实例
2012-10-16 21:05 4603在web开发中,一个页面的某些字段可能需要通过弹出浮出对话框的 ... -
ajax请求遇到的一些乱码问题及其解决
2012-10-12 18:12 10461. 在一个系统中的表单数据项很多的编 ... -
值得网站开发人员收藏的 10 个网站
2012-09-27 11:31 0http://www.chinaz.com/free/2010 ... -
12 款简化 CSS3 开发的实用工具
2012-09-27 10:19 0http://www.mangguo.org/10-usefu ... -
网页输入框的提示实现 placeholder
2012-09-21 11:51 0http://blog.csdn.net/trgoofi/ar ... -
50个必备的实用jQuery代码段
2012-09-13 15:00 0http://www.admin10000.com/docum ... -
关于http请求头和响应头的一些疑问
2012-09-12 15:27 01.请求头的值是谁设置上去的?是浏览器自己设置上去的,还是WE ... -
textarea中的输入的规则名称和规则id等生成超链接的js脚本
2012-09-12 11:24 0<script type="text ... -
js 正则表达式用法
2012-09-11 18:24 0正则表达式使用详解 ... -
js中循环获取checkbox值的方式
2012-09-10 15:26 1094在html页面的表单中,有事需要获取checkbox值,由于它 ... -
js中字符串处理的常用方法replaceAll, split , join, indexOf , Array
2012-09-10 15:16 804一:replaceAll的调用方式: 例如1:如想替 ... -
JS跳转页面方式
2012-09-07 20:32 840有的时候在vm页面中,在通过jquery post方式请求完, ... -
jquery的常用api函数总结
2012-07-20 18:00 667.attr( attributeName ): 得到 ... -
jquery/css学习心得三:js的内嵌写法和分开写法
2012-07-20 17:26 3559js可以嵌入写入到html中完成动态功能或者html和js结构 ... -
jquery学习心得(二):一个很好的css和js函数调用的例子
2012-07-18 17:55 983统一目录下的资源结构图: index.htm ... -
jquery和css的一些学习心得(一)
2012-07-18 16:02 639最近由于项目开发需要,学习一些jquery的东东,有一些 ...
相关推荐
jquery分页插件结合jsp实例 有什么不晓得的加Q 359709421
本文实例讲述了bootstrap-table后端分页功能。分享给大家供大家参考,具体如下: 使用bootstrap-table实现后台分页 插件资源点击此处本站下载。 引用以下css <link rel="stylesheet" href="../plugins/...
1、此插件将数据库查询和分页操作分离开,在查询的时候,不管采用什么设计模式,都必须实现 PageListener接口。 2、接口里面包含四个方法 (1)、public List doSelect(int recordStart,int sizePage),参数...
分页插件使用案例(以一个问吧系统为例,详细讲解插件的使用方法); <br>五、运行配置 <br>1、运行环境为jdk(1.4以上),Tomcat(5.0以上),mysql(5.0.x); 2、运行时须改动database.properties,把数据库...
利用jquery插件jqprint打印当前页面的标签内容,自动换页,包含jar包,js,java代码。
java web应用分页组件,可适用于jsp+servlet或s2sh,配置非常简单,引入二行代码即可,内置详细的操作配置文档和jar包及实例文件,未考虑性能优化,对性能要求很高的高手请自行测试或绕行
在实际的开发中post方式的提交比较常见,本人做了一个比较通用的基于post方式的一个应用。主要实现一下功能: 1.添加输入跳转、每页记录数选择功能 2.显示数据与struts2结合实现各行变色 3.基于jquery.form插件的无...
不好意思,"BeeGo框架实现的一个WEB应用实例"没有附带数据库,特此补正! 本应用是用BeeGo框架进行的一个WEB应用快速开发,是一个在生产环境实际运行的商业软件。 适用数据库MySQL,详细配置请参阅conf\global\app....
目前在做一个java web页面,没有使用到框架的分页,所以需要自己实现分页,就想到了用angularjs来实现分页,数据通过ajax从后台获取。 插件 百度了一下,看到一个比较漂亮的插件,就直接用该插件,并修改了部分细节...
首先介绍一款简单利落的分页利器:bootstrap-paginator,可以参考:Bootstrap Paginator分页插件使用方法详解 这篇文章进行学习。 效果截图: GitHub官方下载地址:...
前端采用了amazeui制作工作台页面,标准的左边菜单栏右边工作页面---一个适合各种此类应用的快速开发模板。其他还有ztree树形组件、echarts百度报表插件、paging分页组件。。 实现了几个单表的CRUD操作的几个模块,...
DataTables表格中其它的索引对应的页中并没有绑定数据,只有在点击索引后,后台方法会对内存逻辑分页,根据该索引值进行操作后,把指定1逻辑页面中的数据提供给DataTables插件,其后DataTables插件会把指定逻辑页面...
园友是做前端的,产品经理要求他使用jQuery DataTables插件显示一个列表,要实现分类效果。 后端的分页接口已经写好了,不涉及条件查询,需要传入页码(pageNo)和页面显示数据条数(pageSize),显示相应页的显示记录,...
jpaginate是一个自带滑动动画效果的jQuery分页插件,用户可以通过单击或只是悬停在箭头上的使页码滑动显示。 你可以用下面的方式调用插件: $(elementID).paginate() 您可以通过一下属性来配置插件: count:页面...
不好意思,"BeeGo框架实现的一个WEB应用实例"没有附带数据库,特此补正! 本应用是用BeeGo框架进行的一个WEB应用快速开发,是一个在生产环境实际运行的商业软件。 适用数据库MySQL,详细配置请参阅conf\global\app....
WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB...
插件优势: 1. 用插件自动建表,表之间的联系。 2. 自动生成DAO,BIZ,ACTION,JSP增删改查页面。 3. 项目负责人员只需要设计好数据库中有哪些表,表里有...5. 所有数据库表的简单增删改查以及分页功能页面的自动生成。
单击该按钮将按照WordPress管理员中“最大帖子数”选项设置的间隔将帖子的下一个“页面”添加到页面底部。 将根据要添加的剩余帖子数自动调整要更新的帖子数,并且当没有更多帖子要加载时,该按钮将自动隐藏。
实现原理很简单,使用了jquery.pagination这个插件,每当点击页码时异步去服务器去取该页的数据,简单介绍如下: 一、数据库表结构:很简单 就四个字段 分别是News_id News_title News_time News_readtimes ...