DataTablePageUtil.java
9.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
package com.project.demo.domain;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* Created by zhanglj
* on 17/2/26.
*/
public class DataTablePageUtil<T> {
/*------------------DT自动请求的参数(Sent parameters) begin--------------------*/
/*
* 绘制计数器。这个是用来确保Ajax从服务器返回的是对应的(Ajax是异步的,因此返回的顺序是不确定的)。 要求在服务器接收到此参数后再返回
*/
private int draw; // 第几次请求
/*
* 第一条数据的起始位置,比如0代表第一条数据
*/
private int start = 0;// 起止位置
/*
* 告诉服务器每页显示的条数,这个数字会等于返回的 data集合的记录数,可能会大于因为服务器可能没有那么多数据。
* 这个也可能是-1,代表需要返回全部数据(尽管这个和服务器处理的理念有点违背)
*/
private int length = 10; // 数据长度
/*
* 全局的搜索条件,条件会应用到每一列( searchable需要设置为 true )
*/
private String search;
/*
* 如果为 true代表全局搜索的值是作为正则表达式处理,为 false则不是。
* 注意:通常在服务器模式下对于大数据不执行这样的正则表达式,但这都是自己决定的
*/
private boolean is_search;
/*
* 告诉后台那些列是需要排序的。 i是一个数组索引,对应的是 columns配置的数组,从0开始
*/
private int[] order;
/*
* 告诉后台列排序的方式, desc 降序 asc升序
*/
private String order_dir;
/*
* columns 绑定的数据源,由 columns.dataOption 定义。
*/
private String columns_data;
/*
* columns 的名字,由 columns.nameOption 定义。
*/
private String columns_name;
/*
* 标记列是否能被搜索,为true代表可以,否则不可以,这个是由 columns.searchableOption 控制
*/
private String columns_searchable;
/*
* 标记列是否能排序,为 true代表可以,否则不可以,这个是由 columns.orderableOption 控制
*/
private boolean is_orderable;
/*
* 标记具体列的搜索条件
*/
private String columns_search_value;
/*
* 特定列的搜索条件是否视为正则表达式, 如果为 true代表搜索的值是作为正则表达式处理,为 false则不是。
* 注意:通常在服务器模式下对于大数据不执行这样的正则表达式,但这都是自己决定的
*/
private boolean is_search_regex;
/*------------------DT自动请求的参数(Sent parameters) end--------------------*/
/*------------------服务器需要返回的数据(Returned data) begin--------------------*/
/*
* 必要。上面提到了,Datatables发送的draw是多少那么服务器就返回多少。
* 这里注意,作者出于安全的考虑,强烈要求把这个转换为整形,即数字后再返回,而不是纯粹的接受然后返回,这是 为了防止跨站脚本(XSS)攻击。
*/
// private int draw;
/*
* 必要。即没有过滤的记录数(数据库里总共记录数)
*/
private int recordsTotal;
/*
* 必要。过滤后的记录数(如果有接收到前台的过滤条件,则返回的是过滤后的记录数)
*/
private int recordsFiltered;
/*
* 必要。表中中需要显示的数据。这是一个对象数组,也可以只是数组, 区别在于 纯数组前台就不需要用 columns绑定数据,会自动按照顺序去显示
* ,而对象数组则需要使用 columns绑定数据才能正常显示。 注意这个 data的名称可以由 ajaxOption 的
* ajax.dataSrcOption 控制
*/
private List<T> data;
/*
* 可选。你可以定义一个错误来描述服务器出了问题后的友好提示
*/
private String error;
/*-------------可选参数-----------------*/
/*
* 自动绑定到 tr节点上
*/
private String dt_rowId;
/*
* 自动把这个类名添加到 tr
*/
private String dt_rowClass;
/*
* 使用 jQuery.data() 方法把数据绑定到row中,方便之后用来检索(比如加入一个点击事件)
*/
private Object dt_rowData;
/*
* 自动绑定数据到 tr上,使用 jQuery.attr() 方法,对象的键用作属性,值用作属性的值。 注意这个 需要 Datatables
* 1.10.5+的版本才支持
*/
private Object dt_rowAttr;
/*-------------可选参数-----------------*/
/*------------------服务器需要返回的数据(Returned data) end--------------------*/
/*
* 当前页码
*/
private int page_num = 1;
/*
* 每页数据
*/
private int page_size = 10;
public DataTablePageUtil() {
}
public DataTablePageUtil(HttpServletRequest request) {
//开始的数据行数
String start = request.getParameter("start");
//每页的数据数
String length = request.getParameter("length");
//DT传递的draw:
String draw = request.getParameter("draw");
this.setStart(Integer.parseInt(start));
this.setLength(Integer.parseInt(length));
this.setDraw(Integer.parseInt(draw));
this.setPage_size(Integer.parseInt(length));
//计算页码
this.page_num = (Integer.parseInt(start) / Integer.parseInt(length)) + 1;
}
public int getDraw() {
return draw;
}
public void setDraw(int draw) {
this.draw = draw;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public String getSearch() {
return search;
}
public void setSearch(String search) {
this.search = search;
}
public boolean isIs_search() {
return is_search;
}
public void setIs_search(boolean is_search) {
this.is_search = is_search;
}
public int[] getOrder() {
return order;
}
public void setOrder(int[] order) {
this.order = order;
}
public String getOrder_dir() {
return order_dir;
}
public void setOrder_dir(String order_dir) {
this.order_dir = order_dir;
}
public String getColumns_data() {
return columns_data;
}
public void setColumns_data(String columns_data) {
this.columns_data = columns_data;
}
public String getColumns_name() {
return columns_name;
}
public void setColumns_name(String columns_name) {
this.columns_name = columns_name;
}
public String getColumns_searchable() {
return columns_searchable;
}
public void setColumns_searchable(String columns_searchable) {
this.columns_searchable = columns_searchable;
}
public boolean isIs_orderable() {
return is_orderable;
}
public void setIs_orderable(boolean is_orderable) {
this.is_orderable = is_orderable;
}
public String getColumns_search_value() {
return columns_search_value;
}
public void setColumns_search_value(String columns_search_value) {
this.columns_search_value = columns_search_value;
}
public boolean isIs_search_regex() {
return is_search_regex;
}
public void setIs_search_regex(boolean is_search_regex) {
this.is_search_regex = is_search_regex;
}
public int getRecordsTotal() {
return recordsTotal;
}
public void setRecordsTotal(int recordsTotal) {
this.recordsTotal = recordsTotal;
}
public int getRecordsFiltered() {
return recordsFiltered;
}
public void setRecordsFiltered(int recordsFiltered) {
this.recordsFiltered = recordsFiltered;
}
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
public String getDt_rowId() {
return dt_rowId;
}
public void setDt_rowId(String dt_rowId) {
this.dt_rowId = dt_rowId;
}
public String getDt_rowClass() {
return dt_rowClass;
}
public void setDt_rowClass(String dt_rowClass) {
this.dt_rowClass = dt_rowClass;
}
public Object getDt_rowData() {
return dt_rowData;
}
public void setDt_rowData(Object dt_rowData) {
this.dt_rowData = dt_rowData;
}
public Object getDt_rowAttr() {
return dt_rowAttr;
}
public void setDt_rowAttr(Object dt_rowAttr) {
this.dt_rowAttr = dt_rowAttr;
}
public int getPage_num() {
return page_num;
}
public void setPage_num(int page_num) {
this.page_num = page_num;
}
public int getPage_size() {
return page_size;
}
public void setPage_size(int page_size) {
this.page_size = page_size;
}
}