微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jquery表格datatables实例解析 直接加载和延迟加载

参考自官方文档,需要引入jquery.js,jquery.dataTables.js,dataTables.bootstrap.js(可选), 由于时间紧,省略了很多,所以总结份简化版的仅供参考。

1、直接加载

,这个比较简单,如下

rush:xhtml;">

jsp用了bootstrap的栅格,js如下

rush:js;">

后台传个json就行了,由于这个破项目表名都很奇葩凑合看吧。

<div class="jb51code">
<pre class="brush:java;">
List gxlist=new ArrayList();
String sql="select * from ODS10000060";
try {
List 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.<a href="https://www.jb51.cc/tag/printstacktrace/" target="_blank" class="keywords">printstacktrace</a>();
  }

2、延迟加载

由于老项目用的struts1,造成前台form接收参数有问题,所以直接用servlet接收 前端jsp如1直接加载一样,js如下

<div class="jb51code">
<pre class="brush: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" : "显示","oPaginate" : {
"sFirst" : "首页","sLast" : "末页"
},"oAria" : {
"sSortAscending" : ": 以升序排列此列","sSortDescending" : ": 以降序排列此列"
}
}
} );
showPage();
}

function showQueryTable(){
//建table
$('#secondtid').remove();
$("#tid").append(
"

" +
"<tr>" +
"" +
"" +
"" +
"" +
"" +
"</tr></table>" +
"");
//创建表头
/$.ajax({
url : urlcontextpath+'/mst/DatatablesLazyLoadServlet?flag=titles',// 跳转到 action
data : {
index : ''
},success : function(data) {
var dataObj = eval(data);
},error : function() {
alert("异常!");
}
});
/
//填充数据
initDatatables();
}

注:

这个已经是简化版的了,表头可以用另一个ajax传过来,这里省略直接写死了。 下面是后台部分

<div class="jb51code">
<pre class="brush:java;">
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.getP<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>meter("flag");
String tableCode = request.getP<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>meter("tableCode");
String fieldCode = request.getP<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>meter("fieldCode");

if(flag==null)return;
if(flag.equals("titles")){

}else if(flag.equals("details")){
  String draw = request.getP<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>meter("draw");
  String start = request.getP<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>meter("start");
  String length = request.getP<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>meter("length");
  StringBuilder <a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a> = 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) <a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.deleteCh<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>t(<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.lastIndexOf(","));
  <a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.append(" from ").append(tableCode);
  <a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.append(" where 1=1 ");
  String filter<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a> = getFilter<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>(titles,request);
  Integer totalCount =ds.get<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>RecordCount("select count(*) from (" + <a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.toString()+ ") tmp");
  Integer filterCount = ds.get<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>RecordCount("select count(*) from (" + <a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.toString()+filter<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>+ ") tmp");

  String[] strings = fieldCode.split(",");

  String order<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a> = g<a href="https://www.jb51.cc/tag/eto/" target="_blank" class="keywords">eto</a>rder<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>(strings,request);
  <a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.append(filter<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>);
  <a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.append(order<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>);
  List<Map> lt = ds.execute<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>ToRecordMap(<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.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) {
    // T<a href="https://www.jb51.cc/tag/odo/" target="_blank" class="keywords">odo</a> Auto-generated catch block
    e1.<a href="https://www.jb51.cc/tag/printstacktrace/" target="_blank" class="keywords">printstacktrace</a>();
  }
}

}

/**

  • 得到所有的列标题名称
  • @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 list = ds.executesqlToRecordMap(sql.toString());
    return list;*/
StringBuilder <a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a> = new StringBuilder("select UPPER(ODS_DF_NAME) fieldName,UPPER(ODS_DF_DATA_TYPE) fieldType from ODS.ODS_DF_INFO_REG ");
<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.append(" where 1=1 ");
<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.append(" and ODS_TB_CODE = '"+tableCode+"'");
<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.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.deleteCh<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>t(ids.lastIndexOf(","));
<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.append(ids);
<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.append(")");    
List lt = ds.execute<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>ToRecordMap(<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.toString());
return lt;

}

/**

  • 前台搜索

  • @param fieldLt

  • @return
    */
    private String getFiltersql(List 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 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 sub<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a> = fieldName + " like '%"+searchValue+"%'";
     filterDetail.add(sub<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>);

    }
    }
    }
    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 filter<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.toString();

}

/**

  • 排序
  • @param fieldLt
  • @return
    */
    private String getordersql(String[] titles,HttpServletRequest request){
StringBuilder order<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a> = new StringBuilder(" order by ");
String indexKey = "order[0][column]";
String dirKey = "order[0][dir]";
Integer columnIndex = Integer.valueOf(request.getP<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>meter(indexKey));
String dir = request.getP<a href="https://www.jb51.cc/tag/ara/" target="_blank" class="keywords">ara</a>meter(dirKey);
if(columnIndex<=titles.length){
  order<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.append(titles[columnIndex]).append(" ").append(dir);
  return order<a href="https://www.jb51.cc/tag/sql/" target="_blank" class="keywords">sql</a>.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();
}
}

总结,做的比较急,也没好好整理下直接贴出来,因为也不难,肯定有地方写的不好,仅供参考。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

原文地址:https://www.jb51.cc/jquery/46617.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐