jquery表格datatables,直接加载和延迟加载

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

1,直接加载,这个比较简单,如下

<div id="tid" class="col-sm-12 col-md-12">
    <div id="secondtid" hidden="hidden"></div>
</div>

jsp用了bootstrap的栅格,js如下

<script type="text/javascript">
        function getgaoxinqu() {
            $('#secondtid').remove();
            $("#tid").append(
                            "<div 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></div>");
            $.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(
                    "<div 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>" +
                    "</div>");
    //创建表头 
    /*$.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();
    }
}

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java中使用jQuery表格插件datatables,您需要将datatables插件的JavaScript和CSS文件添到您的项目中,并将它们链接到您的HTML页面。然后,您可以使用以下步骤来在Java中使用datatables插件: 1.在HTML页面中创建一个表格,并添一个唯一的ID。 2.在JavaScript代码中初始化datatables插件,并将其绑定到表格的ID。 例如,以下是初始化datatables插件并将其绑定到表格ID为"example"的代码示例: ``` $(document).ready(function() { $('#example').DataTable(); } ); ``` 3.在Java代码中,您需要从数据库中检索数据,并将其转换为JSON格式。 4.将JSON数据传递给您的HTML页面,以便datatables插件可以使用它来填充表格。 例如,以下是从Java中检索数据并将其转换为JSON格式的代码示例: ``` List<Employee> employees = employeeService.getEmployees(); Gson gson = new Gson(); String json = gson.toJson(employees); model.addAttribute("employeesJson", json); ``` 5.在HTML页面中,使用datatables插件的"ajax"选项将JSON数据传递给表格。 例如,以下是将JSON数据传递给表格的代码示例: ``` $(document).ready(function() { $('#example').DataTable( { "ajax": "/employees", "columns": [ { "data": "id" }, { "data": "name" }, { "data": "position" }, { "data": "salary" } ] } ); } ); ``` 在上述代码中,"ajax"选项指向您的Java控制器中的URL,该控制器返回JSON数据。"columns"选项指定表格的列。每个"columns"对象中的"data"属性指定JSON数据对象中的属性。 希望这可以帮助您开始在Java中使用datatables插件!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值