您好,欢迎访问一九零五行业门户网

jquery表格直接加载和延迟加载代码实例详解

需要引入jquery.js,jquery.datatables.js,datatables.bootstrap.js(可选), 
1、直接加载,这个比较简单,如下
<p id="tid" class="col-sm-12 col-md-12"> <p id="secondtid" hidden="hidden"></p> </p>
jsp用了bootstrap的栅格,js如下
<script type="text/javascript"> function getgaoxinqu() { $('#secondtid').remove(); $("#tid").append( "<p id='secondtid' style='width: 100%;'><table id='table_id' class='table table-striped table-bordered table-hover no-footer datatable display' ><thead><tr><th nowrap>id</th><th nowrap>高新区名称</th><th nowrap>地区</th><th nowrap>工商注册企业数</th><th nowrap>网址</th><th nowrap>工业总产值(千元)</th><th nowrap>工业增加值(千元)</th><th nowrap>主导产业</th><th nowrap>财政收入(万元)</th><th nowrap>财政支出(万元)</th></tr></thead><tbody></tbody></table></p>"); $.ajax({ url : '${contextpath}/mst/theme/otheroperateplatformtheme.do?flag=gaoxinqu',// 跳转到 action data : { barname : '1' }, serverside: true,//服务器处理 traditional : true, type : 'post', success : function(data) { var dataobj = eval(data); $('#table_id').datatable( { data : dataobj, sscrolly: 600, sscrollx: '100%', columns : [ { data : 'id' },{ data : 'name' }, { data : 'dy' }, { data : 'gxqyy' }, { data : 'www' }, { data : 'gysum' }, { data : 'gyadd' }, { data : 'zdcy' } , { data : 'cztr' } , { data : 'czzc' } ], order:[[ 0, "asc" ]], language : { search : "在表格中搜索:", show : "显示", "sprocessing" : "处理中...", "slengthmenu" : "显示 _menu_ 项结果", "szerorecords" : "没有匹配结果", "sinfo" : "显示第 _start_ 至 _end_ 项结果,共 _total_ 项", "sinfoempty" : "显示第 0 至 0 项结果,共 0 项", "sinfofiltered" : "(由 _max_ 项结果过滤)", "sinfopostfix" : "", "ssearch" : "搜索:", "surl" : "", "semptytable" : "表中数据为空", "sloadingrecords" : "载入中...", "sinfothousands" : ",", "opaginate" : { "sfirst" : "首页", "sprevious" : "上页", "snext" : "下页", "slast" : "末页" }, "oaria" : { "ssortascending" : ": 以升序排列此列", "ssortdescending" : ": 以降序排列此列" } } }); showpage(); }, error : function() { alert("异常!"); } }); showpage();//高度调节 } </script>
后台传个json就行了
list<gaoxindistrict> gxlist=new arraylist<gaoxindistrict>(); string sql="select * from ods10000060"; try { list<map> list = oracledictionaryservice.executesqltorecordmap(sql); for (map map : list) { gaoxindistrict gx=new gaoxindistrict(); object id= map.get("id"); object name = map.get("name"); object jb = map.get("jb"); object dy = map.get("dy"); object year = map.get("year"); object fzr = map.get("fzr"); object tbr = map.get("tbr"); object phone = map.get("phone"); object email = map.get("email"); object www = map.get("www"); object gxqmjsum = map.get("gxqmjsum"); object jcmj = map.get("jcmj"); object gxqyy = map.get("gxqyy"); object gysum = map.get("gysum"); object gyadd = map.get("gyadd"); object cztr = map.get("cztr"); object czzc = map.get("czzc"); object dec = map.get("dec"); object zdcy = map.get("zdcy"); gx.setid(integer.parseint(string.valueof(id))); gx.setname(name.tostring()); gx.setjb(jb.tostring()); gx.setdy(dy.tostring()); gx.setyear(year.tostring()); gx.setfzr(fzr.tostring()); gx.settbr(tbr.tostring()); gx.setphone(phone.tostring()); gx.setemail(email.tostring()); gx.setwww(www.tostring()); gx.setgxqmjsum(gxqmjsum.tostring()); gx.setjcmj(jcmj.tostring()); gx.setgxqyy(gxqyy.tostring()); gx.setgysum(gysum.tostring()); gx.setgyadd(gyadd.tostring()); gx.setcztr(cztr.tostring()); gx.setczzc(czzc.tostring()); gx.setdec(dec.tostring()); gx.setzdcy(zdcy.tostring()); gxlist.add(gx); } parsejsonresult(gxlist, response); } catch (exception e) { e.printstacktrace(); }
2、延迟加载
由于老项目用的struts1,造成前台form接收参数有问题,所以直接用servlet接收
前端jsp如1直接加载一样,js如下
function initdatatables(){ /*var columns = new array(); $("#listtable thead th").each(function(index, element) { var fieldname=$(element).attr("fieldname"); if(fieldname.indexof('.')>0)fieldname=fieldname.substring(2); columns.push({"data":fieldname}); }); if($('#listtable').length<=0) return; //-- 列定义 var columndefs = new array(); $("#listtable thead th").each(function(index, element) { if($(element).attr("fieldtype")!='varchar'){ columndefs.push({ "orderable": true, "searchable" : false, "targets": index }); } });*/ $('#listtable').datatable( { "processing": true,//处理中显示 "serverside": true,//服务器处理 "sscrolly": 300, "sscrollx": "100%", "columns":[{"data":"id"},{"data":"year"},{"data":"region"},{"data":"gyzcz"},{"data":"qys"}], /*"columns":columns,*/ /*"columndefs":columndefs,*/ // "binfo": false, // "bpaginate": false, // "bfilter":false,/servlet/complexinquireservlet // "blengthchange": false, "ajax": { "url": urlcontextpath+"/mst/datatableslazyloadservlet?flag=details", "type": "post", "data": function ( d ) { var queryform = document.queryconditionform; d['fieldcode'] = 'id,year,region,gyzcz,qys'; d['tablecode'] = 'ods10000030'; //表名 } }, "olanguage": { "search" : "在表格中搜索:", "show" : "显示", "sprocessing" : "处理中...", "slengthmenu" : "显示 _menu_ 项结果", "szerorecords" : "没有匹配结果", "sinfo" : "显示第 _start_ 至 _end_ 项结果,共 _total_ 项", "sinfoempty" : "显示第 0 至 0 项结果,共 0 项", "sinfofiltered" : "(由 _max_ 项结果过滤)", "sinfopostfix" : "", "ssearch" : "搜索:", "surl" : "", "semptytable" : "表中数据为空", "sloadingrecords" : "载入中...", "sinfothousands" : ",", "opaginate" : { "sfirst" : "首页", "sprevious" : "上页", "snext" : "下页", "slast" : "末页" }, "oaria" : { "ssortascending" : ": 以升序排列此列", "ssortdescending" : ": 以降序排列此列" } } } ); showpage(); } function showquerytable(){ //建table $('#secondtid').remove(); $("#tid").append( "<p id='secondtid' style='width: 100%;'>" + "<table id='listtable' class='table table-striped table-bordered table-hover no-footer datatable display' ><thead><tr>" + "<th nowrap>id</th>" + "<th nowrap>年份</th>" + "<th nowrap>地区</th>" + "<th nowrap>工业总产值(万元)</th>" + "<th nowrap>企业数(家)</th>" + "</tr></thead><tbody></tbody></table>" + "</p>"); //创建表头 /*$.ajax({ url : urlcontextpath+'/mst/datatableslazyloadservlet?flag=titles',// 跳转到 action data : { index : '' }, type : 'post', success : function(data) { var dataobj = eval(data); }, error : function() { alert("异常!"); } });*/ //填充数据 initdatatables(); }
注:这个已经是简化版的了,表头可以用另一个ajax传过来,这里省略直接写死了。
下面是后台部分
public class datatableslazyload extends httpservlet{ @override protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { this.process(request, response); } /** * datatables 延迟加载 数据加载,flag标注details表示注入数据,titles表示注入标题。 * @param request * @param response */ private void process(httpservletrequest request, httpservletresponse response) { servletcontext servletcontext=request.getsession().getservletcontext(); webapplicationcontext wac =webapplicationcontextutils.getrequiredwebapplicationcontext(servletcontext); dictionaryserviceimpl ds=(dictionaryserviceimpl)wac.getbean("oracledictionaryservice"); string flag = request.getparameter("flag"); string tablecode = request.getparameter("tablecode"); string fieldcode = request.getparameter("fieldcode"); if(flag==null)return; if(flag.equals("titles")){ }else if(flag.equals("details")){ string draw = request.getparameter("draw"); string start = request.getparameter("start"); string length = request.getparameter("length"); stringbuilder sql = new stringbuilder("select "); list titles = this.gettitles(tablecode,fieldcode,ds); for(int i=0;i<titles.size();i++){ map record = (map)titles.get(i); sql.append(" ").append(record.get("fieldname")).append(", "); } if(sql.lastindexof(",")>0) sql.deletecharat(sql.lastindexof(",")); sql.append(" from ").append(tablecode); sql.append(" where 1=1 "); string filtersql = getfiltersql(titles,request); integer totalcount =ds.getsqlrecordcount("select count(*) from (" + sql.tostring()+ ") tmp"); integer filtercount = ds.getsqlrecordcount("select count(*) from (" + sql.tostring()+filtersql+ ") tmp"); string[] strings = fieldcode.split(","); string ordersql = getordersql(strings,request); sql.append(filtersql); sql.append(ordersql); list<map> lt = ds.executesqltorecordmap(sql.tostring(),integer.valueof(start),integer.valueof(length)); map result = new linkedhashmap(); result.put("draw", draw); result.put("recordstotal", totalcount);//记录总行数 result.put("recordsfiltered", filtercount);//过滤的行数 int count=integer.valueof(length)+1; for(map r : lt){ r.put("dt_rowid", r.get("id"));//设置行主键 map rowdate = new linkedhashmap();//row data rowdate.putall(r); r.put("dt_rowdata", rowdate); r.put("countinx", count); count++; } result.put("data", lt); try { convertlisttojson(result, response); } catch (exception e1) { // todo auto-generated catch block e1.printstacktrace(); } } } /** * 得到所有的列标题名称 * @return */ private list gettitles(string tablecode,string fieldcode,dictionaryserviceimpl ds){ /*stringbuilder sql = new stringbuilder("select upper(ods_df_name) fieldname,ods_df_cn_name fieldlabel,ods_df_code fieldcode,upper(ods_df_data_type) fieldtype from ods.ods_df_info_reg "); sql.append(" where ods_tb_code= '"+tablecode+"' "); list<map> list = ds.executesqltorecordmap(sql.tostring()); return list;*/ stringbuilder sql = new stringbuilder("select upper(ods_df_name) fieldname,ods_df_cn_name fieldlabel,ods_df_code fieldcode,upper(ods_df_data_type) fieldtype from ods.ods_df_info_reg "); sql.append(" where 1=1 "); sql.append(" and ods_tb_code = '"+tablecode+"'"); sql.append(" and ods_df_name in ("); string[] tmp = fieldcode.split(","); stringbuilder ids = new stringbuilder(); for(string t : tmp){ if(stringutils.isempty(t)) continue; ids.append("'").append(t).append("',"); } if(ids.lastindexof(",")>0) ids.deletecharat(ids.lastindexof(",")); sql.append(ids); sql.append(")"); list lt = ds.executesqltorecordmap(sql.tostring()); return lt; } /** * 前台搜索 * @param fieldlt * @return */ private string getfiltersql(list<map> fieldlt,httpservletrequest request) { stringbuilder filtersql = new stringbuilder(" and ( "); string searchkey = "search[value]"; string searchvalue = request.getparameter(searchkey); system.out.println(searchvalue); if(stringutils.isempty(searchvalue)) return ""; list<string> filterdetail = new arraylist(); for(int i=0;i<fieldlt.size();i++){ map field = fieldlt.get(i); if(field.get("fieldtype").equals("varchar")){ string subkey = "columns["+i+"][searchable]"; if("true".equals(request.getparameter(subkey))){ string fieldname = field.get("fieldname").tostring(); string subsql = fieldname + " like '%"+searchvalue+"%'"; filterdetail.add(subsql); } } } if(filterdetail.size()==0) return ""; boolean f = true; for(string subsql : filterdetail){ if(f){ f= false; filtersql.append(subsql); }else{ filtersql.append(" or ").append(subsql); } } filtersql.append(")"); return filtersql.tostring(); } /** * 排序 * @param fieldlt * @return */ private string getordersql(string[] titles,httpservletrequest request){ stringbuilder ordersql = new stringbuilder(" order by "); string indexkey = "order[0][column]"; string dirkey = "order[0][dir]"; integer columnindex = integer.valueof(request.getparameter(indexkey)); string dir = request.getparameter(dirkey); if(columnindex<=titles.length){ ordersql.append(titles[columnindex]).append(" ").append(dir); return ordersql.tostring(); } return ""; } public void convertlisttojson(map map,httpservletresponse response)throws exception{ jsonarray json = jsonarray.fromobject(map); response.setheader("cache-control", "no-cache"); response.setcontenttype("text/html; charset=gbk"); printwriter writer; writer = response.getwriter(); writer.write(json.get(0).tostring()); writer.close(); } }
以上就是jquery表格直接加载和延迟加载代码实例详解的详细内容。
其它类似信息

推荐信息