datable常规配置,百度一大堆

function prepareDatatable(selector, options) {
var defaultOptions = {
autoWidth: true,
deferRender: true,
processing: true,
lengthMenu: [10, 25, 50, 100],
colReorder: true,
          stateSave:true,//datatable分页刷新后 固定在当前页
          retrieve:true,//和destroy一起,用于屏蔽Cannot reinitialise DataTable提示的
          destroy:true,
serverSide: false,//true表示服务器端分页,false表示前端分页
pagingType: "full_numbers",
          //有兴趣的话,可以好好研究一下dom,这就很清楚datatable的布局,也好自己加按钮等
//dom: '<"dataTables_header"<"dataTables_toolbar" <"dataTables_controls" r>f>>t<"dataTables_footer row"<"col-md-6 m-t" <"pull-left" l><"pull-left" i>><"col-md-6 m-t"p>><"clearfix">',
dom: '<"dataTables_header"<"dataTables_toolbar" <"dataTables_controls" >f>>t<"dataTables_footer row"<"col-md-6 m-t" <"pull-left" l><"pull-left" i>><"col-md-6 m-t"p>><"clearfix">',
createdRow: function (row, data, dataIndex) {
},
initComplete: function () {
}
}; var tableOption = $.extend(true, {}, defaultOptions);
if (options != null) {
$.extend(true, tableOption, options);
}
return angular.element(selector).DataTable(tableOption);
}
(function () {
var cacModule = angular.module('oplus.cac');
//模型控制器
cacModule.controller('CacJobListCtrl', CacJobListCtrl);
CacJobListCtrl.$inject = ['$scope', '$timeout', '$state', 'cacService', '$http', '$compile', '$uibModal', '$localStorage', '$stateParams', '$filter', '$sessionStorage']; function CacJobListCtrl($scope, $timeout, $state, cacService, $http, $compile, $uibModal, $localStorage, $stateParams, $filter, $sessionStorage) {
var vm = this; vm.views = {
template: {},
tableInstance: null,
findJobStatus: findJobStatus
}; var tableOption = {
id: 'cacJobTable',
order: [[2, 'desc']],//做了后端分页,前端排序就没用了
serverSide: true,
aoColumns: [
{mData: 'templateName', title: '模板'},
{
mData: 'auditParams', title: '检查项',
render: function (data, type, row, meta) {
var auditParams = angular.fromJson(row.auditParams);
var html = '';
for (var i = 0; i < auditParams.length; i++) {
var auditParam = auditParams[i];
html += '脚本:<strong>' + auditParam.scripts.length + '</strong>,' +
'规则:<strong>' + auditParam.ruleExpressions.length + '</strong>,' +
'主机:<strong>' + auditParam.hosts.length + '</strong>' +
'<br>'; }
var actionHtml = '<div>' + html + '</div>';
return actionHtml;
}
},
{
mData: 'createdAt', title: '开始时间',
render: function (data, type, row, meta) {
var createdAt = $filter('date')(row.createdAt, 'yyyy-MM-dd HH:mm:ss');//格式化时间
return createdAt;
}
},
{
mData: 'endedAt', title: '结束时间',
render: function (data, type, row, meta) {
var endedAt = $filter('date')(row.endedAt, 'yyyy-MM-dd HH:mm:ss');
return endedAt;
}
},
{mData: 'createdBy', title: '执行人'},
{
mData: 'id', title: '执行状态',
render: function (data, type, row, meta) {
var id = "'" + row.id + "'";
var jobStatus = row.jobStatus;
var actionHtml = "";
if (jobStatus == "running") {
actionHtml = '<button type="button" class="btn btn-info btn-xs" title="查看" ng-click="cacJobListCtrlVm.views.findJobStatus(' + id + ')">' +
'正在执行</button>';
} else if (jobStatus == "completed") {
actionHtml = '<button type="button" class="btn btn-success btn-xs" title="查看" ng-click="cacJobListCtrlVm.views.findJobStatus(' + id + ')">' +
'成功</button>';
} else {
actionHtml = '<button type="button" class="btn btn-danger btn-xs" title="查看" ng-click="cacJobListCtrlVm.views.findJobStatus(' + id + ')">' +
'失败</button>';
}
return actionHtml;
},
createdCell: function (nTd, sData, oData, iRow, iCol) {
$compile(nTd)($scope);
}
},
{
mData: 'id',
title: '操作',
className: 'text-center',
searchable: false,
orderable: false,
render: function (data, type, row, meta) {
var actionHtml =
'<div class="btn-group">' +
'<a type="button" class="btn btn-default btn-sm" ui-sref="app.cac.result({jobId:\'' + row.id + '\'})">查看结果' +
'</a>' +
'</div>';
return actionHtml;
},
createdCell: function (nTd, sData, oData, iRow, iCol) {
$compile(nTd)($scope);
}
}
]
};
     //这里包含了几种datatable通过ajax获取数据的几种方式
function init() {
if (_appconfig.modules.cac.useLocalDb) {
         //1、
tableOption.ajax = {
url: 'app/modules/cac/api/job.json',
dataSrc: "aaData"
};
} else {
var token = $localStorage.authenticationToken || $sessionStorage.authenticationToken;
          //2、使用后台分页就只能使用这种,这种请求ajax会自带start和length参数到后台。不然就自己重新前端的分页方法
tableOption.ajax = {
url: _appconfig.apiBaseUrls.cac + '/api/cac/audit/jobs',
dataSrc: "data",
async: false,
            //加headers是为了加token,方便后台的验证
headers: {
"Authorization": 'Bearer ' + token,
"X-JWT-Authorization": 'Bearer ' + token
}
};
          //这里还可以用$http();
        
            
       //3、  
       $http({
url: _appconfig.apiBaseUrls.cac + '/api/cac/audit/hosts'
}).success(function (ciList, status, header, config, statusText) {
tableOption.ajax = function (data, callback, settings) {
callback(
cacService.assembleTable(ciList)
);
}; $timeout(function () {
cacService.prepareDatatable(".cac-template-host-dialog .cac-template-host-table", tableOption);
}, 10);
}).error(function (data, header, config, status) {
console.log("Finish $http ajax error");
});           
//将后台返回的List数据组装成datatable要求的数据格式
function assembleTable(ciList) {
var tableObj = {
aaData: [],
totalRecords: 0
};
tableObj.aaData = ciList;
tableObj.totalRecords = ciList.length;
return tableObj
}


            }
$timeout(function () {
//初始化datatables,并保存实例
vm.views.tableInstance = cacService.prepareDatatable(".jobTableDiv .jobTable", tableOption);
}, 10); var template = $stateParams.template;
if (template != null) {
$state.go("app.cac.job.addJob", {template: template});
}
} function findJobStatus(id) {
$uibModal.open({
templateUrl: 'app/modules/cac/job/job-run-log.html',
controller: 'CacJobRunLogCtrl',
controllerAs: 'cacJobRunLogVm',
backdrop: 'static',
size: 'lg',//设置模态框大小
resolve: {
entity: function () {
return {
id: id
}
}
}
}).result.then(function (result) {
});
} init(); } })
();

java后台

 @GetMapping("/jobs")
@ResponseBody
public JSONObject getAllTestPages(@RequestParam(value = "start", defaultValue = "0") Integer start,
@RequestParam(value = "length", defaultValue = "10") Integer length) {
Sort sort = new Sort(Sort.Direction.DESC, "createdAt");//后台排序
Pageable pageable = new PageRequest(start / length, length, sort);
Page<AuditJob> page = auditJobRepository.findAll(pageable);
     /**后台要返回datatable要求的属性,draw就不需要返回了,因为每次请求的draw是不相同的,每一次前端请求draw都会自增,也会传递到后台,所以后台无需做处理也会自动返回去,做处理就是多此一举而且还很麻烦*/
JSONObject jsonObject = new JSONObject();
//将获取的数据组装成Datatable标准格式返回
jsonObject.put("data", page.getContent());
//数据总条数
jsonObject.put("recordsTotal", page.getTotalElements());
//过滤查询后的条数
jsonObject.put("recordsFiltered", page.getTotalElements());
return jsonObject;
}

datatable详解(angular-datatable)+后台分页(springmvc)的更多相关文章

  1. C# DataSet和DataTable详解

    1.C# DataSet和DataTable详解:http://www.cnblogs.com/top5/archive/2009/04/23/1441765.html 2.DataSet和DataT ...

  2. 详解Springboot中自定义SpringMVC配置

    详解Springboot中自定义SpringMVC配置 WebMvcConfigurer接口 ​ 这个接口可以自定义拦截器,例如跨域设置.类型转化器等等.可以说此接口为开发者提前想到了很多拦截层面的需 ...

  3. DataTable详解,以及dataview

    原文地址:http://www.cnblogs.com/moss_tan_jun/archive/2010/09/20/1832131.html 得到DataTable 得到DataTable有许多方 ...

  4. DataSet和DataTable详解

    先构建一个结构与用户请求数据结构相同的DataTable,然后将用户的请求数据填充到构建好的DataTable中,最后将DataTable添加到DataSet中. DataTable,,DataCol ...

  5. 关于PagedDataSource分页属性与DataSet和DataTable详解

    Asp.net提供了三个功能强大的列表控件:DataGrid.DataList和Repeater控件,但其中只有DataGrid控件提供分页功能.相对DataGrid,DataList和Repeate ...

  6. C# DataTable 详解

    添加引用 using System.Data; 创建表 //创建一个空表 DataTable dt = new DataTable(); //创建一个名为"Table_New"的空 ...

  7. 001_ jQuery的表格插件dataTable详解

    一. 1.启用id为"datatable1"标签的html的表格jQuery库 $("#datatable1").dataTable( ) Reference: ...

  8. C# DataTable详解

    添加引用 using System.Data; 创建表 //创建一个空表 DataTable dt = new DataTable(); //创建一个名为"Table_New"的空 ...

  9. Spring 详解(三)------- SpringMVC拦截器使用

    目录 不拦截静态资源 使用拦截器 拦截器使用测试 SimpleMappingExceptionResolver 拦截异常 不拦截静态资源 如果配置拦截类似于*.do格式的拦截规则,则对静态资源的访问是 ...

随机推荐

  1. Android应用开发揭秘之优化技术

    2013-06-28 第15章 优化技术   不管用什么语言进行开发,所有的优秀代码都会展示出共有的经典品质: 简练,可读性强,模块化,层次性,设计良好,高效,优雅,清晰等.   Java程序员能够依 ...

  2. android绝对布局

    绝对布局由AbsoluteLayout代表.绝对布局就像java AWT编程中的空布局,就是Android不提供任何布局控制而是由开发人员自己通过X坐标.Y坐标来控制组件的位置.当使用Absolute ...

  3. machine_learning-knn算法具体解释(近邻算法)

    近邻算法是机器学习算法中的入门算法,该算法用于针对已有数据集对未知数据进行分类. 该算法核心思想是通过计算预測数据与已有数据的相似度猜測结果. 举例: 如果有例如以下一组数据(在下面我们统一把该数据作 ...

  4. 微信client内部推荐项目总结

    如今实习的公司在面向企业提供招聘服务领域数一数二,而下半年的产品重点就在于移动端微信招聘项目.而这次内推项目开发属于微信招聘一个分支.     一.内推综述     乐帝之前读<招聘与录用> ...

  5. ctags高级用法

    1.ctags -R 有个问题,成员变量没有包含在里面.所以自动完成对象的成员时没有提示.解决办法:$ctags -R --fields=+iaS --extra=+q *–fields=[+|-]f ...

  6. 开源项目AndroidUtil-採用Fragment实现TabHost

    原文出自:方杰|http://fangjie.sinaapp.com/?p=141 转载请注明出处 学习Android也有一段时间了.感觉大部分的Android应用都有非常多类似的组件,所以就打算做了 ...

  7. 102. Linked List Cycle【medium】

    Given a linked list, determine if it has a cycle in it.   Example Given -21->10->4->5, tail ...

  8. iOS开发Swift篇—(七)函数

    iOS开发Swift篇—(七)函数 一.函数的定义 (1)函数的定义格式 1 func 函数名(形参列表) -> 返回值类型 { 2 // 函数体... 3 4 } (2)形参列表的格式 形参名 ...

  9. Oracle 11g安装图文攻略

    一.Oracle 下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可. 路径名称中,最好不要出现中文,也不要出现空格等不规则字符. 官方下地址: http://www.ora ...

  10. linux查看匹配内容的前后几行(转)

    linux系统中,利用grep打印匹配的上下几行   如果在只是想匹配模式的上下几行,grep可以实现.   $grep -5 'parttern' inputfile //打印匹配行的前后5行   ...