English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Basado en SpringMVC+Bootstrap+Implementación de paginación de la tabla en el servidor y búsqueda borrosa con DataTables

Introducción

Basado en SpringMVC+Bootstrap+DataTables realiza la paginación del servidor de la tabla de datos, la búsqueda borrosa (no DataTable Search), actualización asincrónica de la página.

Nota: El etiqueta sp:message utiliza la internacionalización de SpringMVC

Efecto

Tabla de DataTables

Búsqueda de palabras clave

Búsqueda de palabras clave personalizada, no DataTable Search

Código

Código HTML

Código de condiciones de búsqueda

<!-- Consultar, agregar, eliminar en lote, exportar, actualizar -->
<div class="row-fluid">
<div class="pull-right">
<div class="btn-group">
<button type="button" class="btn btn-primary btn-sm" id="btn-add">
<i class="fa fa-plus"></i> <sp:message code="sys.add"/>
</button>
<button type="button" class="btn btn-primary btn-sm" id="btn-delAll">
<i class="fa fa-remove"></i> <sp:message code="sys.delAll"/>
</button>
<button type="button" class="btn btn-primary btn-sm" id="btn-export">
<i class="fa fa-sign-in"></i> <sp:message code="sys.export"/>
</button>
<button type="button" class="btn btn-primary btn-sm" id="btn-re">
<i class="fa fa-refresh"></i> <sp:message code="sys.refresh"/>
</button>
</div>
</div>
<div class="row">
<form id="queryForm" action="<%=path%>/goodsType/method="post">
<div class="col"}-xs-2">
<input type="text" id="keyword" name="keyword" class="form-control de entrada-sm"
placeholder="<sp:message code="sys.keyword"/">>
</div>
<button type="button" class="btn btn-primary btn-sm" id="btn-query">
<i class="fa fa-search"></i> <sp:message code="sys.query"/>
</button>
</form>
</div>
</div>

Código de la tabla de datos

<table id="dataTable" class="table table-tabla con rayas-tabla con borde-tabla con efecto hover-condensed" align="center">
<thead>
<tr class="info">
<td><input type="checkbox" id="checkAll"></td>
<th><sp:message code="sys.no"/></th>
<th><sp:message code="goods.type.name.cn"/></th>
<th><sp:message code="goods.type.name.en"/></th>
<th><sp:message code="sys.create.time"/></th>
<th><sp:message code="sys.update.time"/></th>
<th><sp:message code="sys.oper"/></th>
</tr>
</thead>
</table>

Código JS

Inicialización de DataTables, solicitud de datos del lado del servidor, encapsulación de condiciones de búsqueda

<!-- script de página -->
<script>
$(function () {
//Agregar, modificar la dirección de presentación asíncrona
var url = "";
var tables = $("#dataTable").dataTable({
serverSide: true,//Paginación, obtención de datos, etc., se colocan en el lado del servidor
processing: true,//¿Se muestra "Cargando" al cargar los datos?
pageLength: 10, //número de filas de datos cargados por primera vez
ordering: false, //la operación de ordenamiento se realiza en el servidor, por lo que se puede desactivar.
pagingType: "full_numbers",
autoWidth: false,
stateSave: true,//mantener el estado de paginación, y usarlo con comTable.fnDraw(false);
searching: false,//deshabilitar la búsqueda de datatables
ajax: { 

url: "<%=path%>/goodsType/getData",
dataSrc: "data",
data: function (d) {
var param = {};
param.draw = d.draw;
param.start = d.start;
param.length = d.length;
var formData = $("#queryForm").serializeArray();//secuencializar los datos del formulario en un array
formData.forEach(function (e) {
param[e.name] = e.value;
});
return param;//parámetros personalizados a pasar.
},
},
columns: [//corresponde a la secuencia en el thead superior
{"data": null,"width":"10px"},
{"data": null},
{"data": 'typeNameCn' },
{"data": 'typeNameEn' },
{"data": 'createTime', 
"render":function(data,type,full,callback) {
return data.substr(0,19) 
}
},
{"data": 'updateTime', defaultContent: "", 
"render":function(data,type,full,callback) {
if(data != null && data != ""){
return data.substr(0,19) 
}else{
return data;
}
}
},
{"data": null,"width":"60px"}
],
//botones de operación
columnDefs: [
{
targets: 0,
defaultContent: "<input type='checkbox' name='checkList'>"
},
{
targets: -1,
defaultContent: "<div class='btn-group'>"+
""+
""+
"
" } ], language: { lengthMenu: "", processing: "", paginate: { previous: "<", next: ">", first: "<<", last: ">>" }, zeroRecords: "", info: "", infoEmpty: "", infoFiltered: "", sSearch: ":", }, //在每次table被draw完后回调函数 fnDrawCallback: function(){ var api = this.api(); //获取到本页开始的条数    var startIndex= api.context[0]._iDisplayStart;    api.column(1).nodes().each(function(cell, i) {      cell.innerHTML = startIndex + i + 1;    }); } }); //查询按钮 -query").on("click", function () { tables.fnDraw();//查询后不需要保持分页状态,回首页 }); //添加 -add").on("click", function () { url = "<%=path%>/goodsType/add"; $("input[name=typeId]").val(0); $("input[name=typeNameCn]").val(""); $("input[name=typeNameEn]").val(""); $("#editModal").modal("show"); }); //批量删除 -delAll").on("click", function () { }); // -export\ }); //refrescar -re").on("click", function () { tables.fnDraw(false);//刷新保持分页状态 }); //checkbox全选 $("#checkAll").on("click", function () { if ($(this).prop("checked") === true) { $("input[name='checkList']").prop("checked", $(this).prop("checked")); //$("#dataTable tbody tr").addClass('selected'); $(this).hasClass('selected') } else { $("input[name='checkList']").prop("checked", false); $("#dataTable tbody tr").removeClass('selected'); } }); //修改 $("#dataTable tbody").on("click", "#editRow", function () { var data = tables.api().row($(this).parents("tr")).data(); $("input[name=typeId]").val(data.typeIdStr); $("input[name=typeNameCn]").val(data.typeNameCn); $("input[name=typeNameEn]").val(data.typeNameEn); url = "<%=path%>/goodsType/update"; $("#editModal").modal("show"); }); -enviar $.ajax({ caché: false, tipo: "POST", url: url, datos:$("#editForm").serialize(), asincrónico: false, error: function(request) { showFail("Error de conexión del servidor..."); }, éxito: function(data) { if(data.status == 1){ $("#editModal").modal("hide"); showSuccess("<sp:message code='sys.oper.success'/>"); tables.fnDraw(); }else{ showFail("<sp:message code='sys.oper.fail'/>"); } } }); }); //eliminar $("#dataTable tbody").on("click", "#delRow", function () { var data = tables.api().row($(this).parents("tr")).data(); if(confirm("¿Está seguro de que desea eliminar esta información?"63;")){ $.ajax({ url:'<%=path%>',/goodsType/del/"+data.typeIdStr, type:'delete', dataType: "json", cache: "false", success:function(data){ if(data.status == 1){ showSuccess("<sp:message code='sys.oper.success'/>"); tables.api().row().remove().draw(false); }else{ showFail("<sp:message code='sys.oper.fail'/>"); } }, error:function(err){ showFail("Error de conexión del servidor..."); } }); } }); }); </script>

Código Java

Método de controlador, responsable de consultar los datos de la tabla de la página, devolver el formato JSON después de formatear.

@RequestMapping(value="/goodsType/getData", produces = "text/json;charset=UTF-8)
@ResponseBody
public String getData(HttpServletRequest request, QueryCondition query) {
DatatablesView<GoodsType> dataTable = goodsTypeService.getGoodsTypeByCondition(query);
dataTable.setDraw(query.getDraw());
String data = JSON.toJSONString(dataTable);
return data;
}

Devuelve el formato de datos JSON

{
"data": [{
"createTime": "2016-10-27 09:42:28.0",
"typeId": 96824775296417986,
"typeIdStr": "96824775296417986",
"typeNameCn": "食品",
"typeNameEn": "Foods",
"updateTime": "2016-10-28 13:00:24.0"
},
{
"createTime": "2016-10-27 09:42:27.0",
"typeId": 96824775296417979,
"typeIdStr": "96824775296417979",
"typeNameCn": "汽车",
"typeNameEn": "Cars123",
"updateTime": "2016-10-27 09:51:24.0"
}],
"draw": 1,
"recordsFiltered": 17,
"recordsTotal": 17
}

DatatablesView, definido según los requisitos de DataTables

public class DatatablesView<T> { 
private List<T> data; //data y datatales corresponden a "dataSrc" cargados 
private int recordsTotal; 
private int recordsFiltered; 
private int draw;
public DatatablesView() { 
}
public int getDraw() {
return draw;
}
public void setDraw(int draw) {
this.draw = draw;
}
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
public int getRecordsTotal() {
return recordsTotal;
}
public void setRecordsTotal(int recordsTotal) {
this.recordsTotal = recordsTotal;
this.recordsFiltered = recordsTotal;
}
public int getRecordsFiltered() {
return recordsFiltered;
}
public void setRecordsFiltered(int recordsFiltered) {
this.recordsFiltered = recordsFiltered;
} 
}

Clase de servicio de negocio,主要负责根据查询条件统计记录数量,查询当前页数据列表

public DatatablesView<GoodsType> getGoodsTypeByCondition(QueryCondition query) {
DatatablesView<GoodsType> dataView = new DatatablesView<GoodsType>();
//Construir condiciones de búsqueda
WherePrams where = goodsTypeDao.structureConditon(query);
Long count = goodsTypeDao.count(where);
List<GoodsType> list = goodsTypeDao.list(where);
dataView.setRecordsTotal(count.intValue());
dataView.setData(list);
return dataView;
}

La capa Dao es la operación básica de consulta de base de datos, aquí se omite...

Final

Aquí se utiliza solo la búsqueda borrosa de palabras clave como condiciones de búsqueda, según las necesidades del negocio, se pueden agregar otras condiciones de búsqueda dinámicamente, y el servidor debe realizar el procesamiento correspondiente.

Lo mencionado anteriormente es lo que el editor les ha presentado basado en SpringMVC+Bootstrap+DataTables realiza la paginación del servidor de tablas y la búsqueda borrosa, espero que sea útil para todos, si tienen alguna pregunta, déjenme un mensaje, el editor responderá a tiempo.

Declaración: el contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha realizado un procesamiento editorial humano y no asume la responsabilidad legal correspondiente. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplace # con @) para denunciar, y proporcione evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.

Te gustaría que te gustara