jquery表格datatables实例解析 直接加载和延迟加载
参考自官方文档,需要引入jquery.js,jquery.dataTables.js,dataTables.bootstrap.js(可选),
由于时间紧,省略了很多,所以总结份简化版的仅供参考。
1、直接加载,这个比较简单,如下
<divid="tid"class="col-sm-12col-md-12"> <divid="secondtid"hidden="hidden"></div> </div>
jsp用了bootstrap的栅格,js如下
<scripttype="text/javascript"> functiongetgaoxinqu(){ $('#secondtid').remove(); $("#tid").append( "<divid='secondtid'style='width:100%;'><tableid='table_id'class='tabletable-stripedtable-borderedtable-hoverno-footerdataTabledisplay'><thead><tr><thnowrap>id</th><thnowrap>高新区名称</th><thnowrap>地区</th><thnowrap>工商注册企业数</th><thnowrap>网址</th><thnowrap>工业总产值(千元)</th><thnowrap>工业增加值(千元)</th><thnowrap>主导产业</th><thnowrap>财政收入(万元)</th><thnowrap>财政支出(万元)</th></tr></thead><tbody></tbody></table></div>"); $.ajax({ url:'${contextPath}/mst/theme/otherOperatePlatformTheme.do?flag=gaoxinqu',//跳转到action data:{ barName:'1' }, serverSide:true,//服务器处理 traditional:true, type:'post', success:function(data){ vardataObj=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=newArrayList<GaoXinDistrict>(); Stringsql="select*fromODS10000060"; try{ List<Map>list=oracledictionaryService.executeSqlToRecordMap(sql); for(Mapmap:list){ GaoXinDistrictgx=newGaoXinDistrict(); Objectid=map.get("ID"); Objectname=map.get("NAME"); ObjectJB=map.get("JB"); ObjectDY=map.get("DY"); ObjectYEAR=map.get("YEAR"); ObjectFZR=map.get("FZR"); ObjectTBR=map.get("TBR"); Objectphone=map.get("PHONE"); ObjectEMAIL=map.get("EMAIL"); ObjectWWW=map.get("WWW"); ObjectGXQMJSUM=map.get("GXQMJSUM"); ObjectJCMJ=map.get("JCMJ"); ObjectGXQYY=map.get("GXQYY"); ObjectGYSUM=map.get("GYSUM"); ObjectGYADD=map.get("GYADD"); ObjectCZTR=map.get("CZTR"); ObjectCZZC=map.get("CZZC"); ObjectDEC=map.get("DEC"); ObjectZDCY=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(Exceptione){ e.printStackTrace(); }
2、延迟加载
由于老项目用的struts1,造成前台form接收参数有问题,所以直接用servlet接收
前端jsp如1直接加载一样,js如下
functioninitDatatables(){ /*varcolumns=newArray(); $("#listTabletheadth").each(function(index,element){ varfieldName=$(element).attr("fieldName"); if(fieldName.indexOf('.')>0)fieldName=fieldName.substring(2); columns.push({"data":fieldName}); }); if($('#listTable').length<=0)return; //--列定义 varcolumnDefs=newArray(); $("#listTabletheadth").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){ varqueryForm=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(); } functionshowQueryTable(){ //建table $('#secondtid').remove(); $("#tid").append( "<divid='secondtid'style='width:100%;'>"+ "<tableid='listTable'class='tabletable-stripedtable-borderedtable-hoverno-footerdataTabledisplay'><thead><tr>"+ "<thnowrap>id</th>"+ "<thnowrap>年份</th>"+ "<thnowrap>地区</th>"+ "<thnowrap>工业总产值(万元)</th>"+ "<thnowrap>企业数(家)</th>"+ "</tr></thead><tbody></tbody></table>"+ "</div>"); //创建表头 /*$.ajax({ url:urlContextPath+'/mst/DatatablesLazyLoadServlet?flag=titles',//跳转到action data:{ index:'' }, type:'post', success:function(data){ vardataObj=eval(data); }, error:function(){ alert("异常!"); } });*/ //填充数据 initDatatables(); }
注:这个已经是简化版的了,表头可以用另一个ajax传过来,这里省略直接写死了。
下面是后台部分
publicclassDatatablesLazyLoadextendsHttpServlet{ @Override protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ this.process(request,response); } /** *datatables延迟加载数据加载,flag标注details表示注入数据,titles表示注入标题。 *@paramrequest *@paramresponse */ privatevoidprocess(HttpServletRequestrequest,HttpServletResponseresponse){ ServletContextservletContext=request.getSession().getServletContext(); WebApplicationContextwac=WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); DictionaryServiceImplds=(DictionaryServiceImpl)wac.getBean("oracledictionaryService"); Stringflag=request.getParameter("flag"); StringtableCode=request.getParameter("tableCode"); StringfieldCode=request.getParameter("fieldCode"); if(flag==null)return; if(flag.equals("titles")){ }elseif(flag.equals("details")){ Stringdraw=request.getParameter("draw"); Stringstart=request.getParameter("start"); Stringlength=request.getParameter("length"); StringBuildersql=newStringBuilder("select"); Listtitles=this.getTitles(tableCode,fieldCode,ds); for(inti=0;i<titles.size();i++){ Maprecord=(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("where1=1"); StringfilterSql=getFilterSql(titles,request); IntegertotalCount=ds.getSqlRecordCount("selectcount(*)from("+sql.toString()+")tmp"); IntegerfilterCount=ds.getSqlRecordCount("selectcount(*)from("+sql.toString()+filterSql+")tmp"); String[]strings=fieldCode.split(","); StringorderSql=getOrderSql(strings,request); sql.append(filterSql); sql.append(orderSql); List<Map>lt=ds.executeSqlToRecordMap(sql.toString(),Integer.valueOf(start),Integer.valueOf(length)); Mapresult=newLinkedHashMap(); result.put("draw",draw); result.put("recordsTotal",totalCount);//记录总行数 result.put("recordsFiltered",filterCount);//过滤的行数 intcount=Integer.valueOf(length)+1; for(Mapr:lt){ r.put("DT_RowId",r.get("id"));//设置行主键 MaprowDate=newLinkedHashMap();//rowdata rowDate.putAll(r); r.put("DT_RowData",rowDate); r.put("countInx",count); count++; } result.put("data",lt); try{ convertListToJson(result,response); }catch(Exceptione1){ //TODOAuto-generatedcatchblock e1.printStackTrace(); } } } /** *得到所有的列标题名称 *@return */ privateListgetTitles(StringtableCode,StringfieldCode,DictionaryServiceImplds){ /*StringBuildersql=newStringBuilder("selectUPPER(ODS_DF_NAME)fieldName,ODS_DF_CN_NAMEfieldLabel,ODS_DF_CODEfieldCode,UPPER(ODS_DF_DATA_TYPE)fieldTypefromODS.ODS_DF_INFO_REG"); sql.append("whereODS_TB_CODE='"+tableCode+"'"); List<Map>list=ds.executeSqlToRecordMap(sql.toString()); returnlist;*/ StringBuildersql=newStringBuilder("selectUPPER(ODS_DF_NAME)fieldName,ODS_DF_CN_NAMEfieldLabel,ODS_DF_CODEfieldCode,UPPER(ODS_DF_DATA_TYPE)fieldTypefromODS.ODS_DF_INFO_REG"); sql.append("where1=1"); sql.append("andODS_TB_CODE='"+tableCode+"'"); sql.append("andODS_DF_NAMEin("); String[]tmp=fieldCode.split(","); StringBuilderids=newStringBuilder(); for(Stringt:tmp){ if(StringUtils.isEmpty(t))continue; ids.append("'").append(t).append("',"); } if(ids.lastIndexOf(",")>0)ids.deleteCharAt(ids.lastIndexOf(",")); sql.append(ids); sql.append(")"); Listlt=ds.executeSqlToRecordMap(sql.toString()); returnlt; } /** *前台搜索 *@paramfieldLt *@return */ privateStringgetFilterSql(List<Map>fieldLt,HttpServletRequestrequest){ StringBuilderfilterSql=newStringBuilder("and("); StringsearchKey="search[value]"; StringsearchValue=request.getParameter(searchKey); System.out.println(searchValue); if(StringUtils.isEmpty(searchValue))return""; List<String>filterDetail=newArrayList(); for(inti=0;i<fieldLt.size();i++){ Mapfield=fieldLt.get(i); if(field.get("FIELDTYPE").equals("VARCHAR")){ StringsubKey="columns["+i+"][searchable]"; if("true".equals(request.getParameter(subKey))){ StringfieldName=field.get("FIELDNAME").toString(); StringsubSql=fieldName+"like'%"+searchValue+"%'"; filterDetail.add(subSql); } } } if(filterDetail.size()==0)return""; booleanf=true; for(StringsubSql:filterDetail){ if(f){ f=false; filterSql.append(subSql); }else{ filterSql.append("OR").append(subSql); } } filterSql.append(")"); returnfilterSql.toString(); } /** *排序 *@paramfieldLt *@return */ privateStringgetOrderSql(String[]titles,HttpServletRequestrequest){ StringBuilderorderSql=newStringBuilder("orderby"); StringindexKey="order[0][column]"; StringdirKey="order[0][dir]"; IntegercolumnIndex=Integer.valueOf(request.getParameter(indexKey)); Stringdir=request.getParameter(dirKey); if(columnIndex<=titles.length){ orderSql.append(titles[columnIndex]).append("").append(dir); returnorderSql.toString(); } return""; } publicvoidconvertListToJson(Mapmap,HttpServletResponseresponse)throwsException{ JSONArrayjson=JSONArray.fromObject(map); response.setHeader("Cache-Control","no-cache"); response.setContentType("text/html;charset=GBK"); PrintWriterwriter; writer=response.getWriter(); writer.write(json.get(0).toString()); writer.close(); } }
总结,做的比较急,也没好好整理下直接贴出来,因为也不难,肯定有地方写的不好,仅供参考。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。