1、如何接收参数,这个代码是参考老外的代码。不过核心逻辑老外写的太差了。
public class DataTablesInput {
/**
* Draw counter. This is used by DataTables to ensure that the Ajax returns
* from server-side processing requests are drawn in sequence by DataTables
* (Ajax requests are asynchronous and thus can return out of sequence).
* This is used as part of the draw return parameter (see below).
*/
@NotNull
@Min(0)
private Integer draw;
/**
* Paging first record indicator. This is the start point in the current
* data set (0 index based - i.e. 0 is the first record).
*/
@NotNull
@Min(0)
private Integer start;
/**
* Number of records that the table can display in the current draw. It is
* expected that the number of records returned will be equal to this
* number, unless the server has fewer records to return. Note that this can
* be -1 to indicate that all records should be returned (although that
* negates any benefits of server-side processing!)
*/
@NotNull
@Min(-1)
private Integer length;
/**
* Global search parameter.
*/
@NotNull
private SearchParameter search;
/**
* Order parameter
*/
@NotEmpty
private List<OrderParameter> order;
/**
* Per-column search parameter
*/
@NotEmpty
private List<ColumnParameter> columns;
public DataTablesInput() {
this.search = new SearchParameter();
this.order = new ArrayList<OrderParameter>();
this.columns = new ArrayList<ColumnParameter>();
}
public Integer getDraw() {
return draw;
}
public void setDraw(Integer draw) {
this.draw = draw;
}
public Integer getStart() {
return start;
}
public void setStart(Integer start) {
this.start = start;
}
public Integer getLength() {
return length;
}
public void setLength(Integer length) {
this.length = length;
}
public SearchParameter getSearch() {
return search;
}
public void setSearch(SearchParameter search) {
this.search = search;
}
public List<OrderParameter> getOrder() {
return order;
}
public void setOrder(List<OrderParameter> order) {
this.order = order;
}
public List<ColumnParameter> getColumns() {
return columns;
}
public void setColumns(List<ColumnParameter> columns) {
this.columns = columns;
}
public List<ColumnParameter> addColumn(ColumnParameter column) {
if(Collections3.isEmpty(columns)){
columns = new ArrayList<ColumnParameter>();
}
columns.add(column);
return columns;
}
}
2、如何输出
public class DataTablesOutput<T> {
/**
* The draw counter that this object is a response to - from the draw
* parameter sent as part of the data request. Note that it is strongly
* recommended for security reasons that you cast this parameter to an
* integer, rather than simply echoing back to the client what it sent in
* the draw parameter, in order to prevent Cross Site Scripting (XSS)
* attacks.
*/
@JsonView(View.class)
private Integer draw;
/**
* Total records, before filtering (i.e. the total number of records in the
* database)
*/
@JsonView(View.class)
private Long recordsTotal;
/**
* Total records, after filtering (i.e. the total number of records after
* filtering has been applied - not just the number of records being
* returned for this page of data).
*/
@JsonView(View.class)
private Long recordsFiltered;
/**
* The data to be displayed in the table. This is an array of data source
* objects, one for each row, which will be used by DataTables. Note that
* this parameter's name can be changed using the ajaxDT option's dataSrc
* property.
*/
@JsonView(View.class)
private List<Map<String, String>> data;
private List<T> sourceData;
/**
* Optional: If an error occurs during the running of the server-side
* processing script, you can inform the user of this error by passing back
* the error message to be displayed using this parameter. Do not include if
* there is no error.
*/
@JsonView(View.class)
private String error;
public interface View {
}
public Integer getDraw() {
return draw;
}
public void setDraw(Integer draw) {
this.draw = draw;
}
public Long getRecordsTotal() {
return recordsTotal;
}
public void setRecordsTotal(Long recordsTotal) {
this.recordsTotal = recordsTotal;
}
public Long getRecordsFiltered() {
return recordsFiltered;
}
public void setRecordsFiltered(Long recordsFiltered) {
this.recordsFiltered = recordsFiltered;
}
public List<Map<String, String>> getData() {
return data;
}
public void setData(List<Map<String, String>> data) {
this.data = data;
}
public List<T> getSourceData() {
return sourceData;
}
public void setSourceData(List<T> sourceData) {
this.sourceData = sourceData;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
}
3、中间过程,通过另外一个查询的参数Searchable,可以百度‘开涛的博客’,将DataTablesInput传来的参数赋值到searchable来,包括分页和排序等,放入Service查询出来之后,再格局DataTablesInput的columns中表单需要展现的字段取出,最后封装到DataTableOutput中去。
分享到:
评论