Пейджинг с Spring MVC, JPA и Datatables - PullRequest
1 голос
/ 21 мая 2019

Я хочу использовать подкачку в контроллере Spring и, на мой взгляд, где я использую таблицы данных. В контроллере я использую хранилище данных Spring с поддержкой подкачки:

@GetMapping("my/url")
public String listAll(
        Model model,
        @PageableDefault(size=200, sort="name") Pageable pageable)
{
    Page<MyEntity> page = repository.findAll(pageable);
    model.addAttribute("page", page);
    return "path-to-html-resource";
}

На мой взгляд, я не знаю, как правильно использовать объект Page.

// this is how I extract the data from the controller (thymeleaf style)
var datatableRows = /*[[${page.getContent()}]]*/'';

$('#mainTable').DataTable({
    "paging" : true,
    "serverSide" : true,
    "ajax" : function (data, callback, settings) {
        // this is definitely not the way to go
        // but so far was the only way I got some data into my table
        var myObject = new Object();
        myObject.aaData = datatableRows;
        callback(myObject);
    },
    "info" : true,
    "columns": [
        { "data": "name"},
        { "data": "validFrom"},
        { "data": "validTo"},
        { "data": "amount"},
        { "data": "currency"}
    ]
});

Кроме того, как мне написать ajax-часть определения datatables, чтобы я мог передавать пейджинговый объект Spring туда и обратно? А как связать датируемые кнопки с индексом подкачки?

1 Ответ

2 голосов
/ 21 мая 2019

Вы можете использовать эту структуру:

Контроллер :

@RequestMapping(value = "/my/url/list")
public ResponseEntity listAllTable(@RequestParam("draw") int draw,
                                  @RequestParam("start") int start,
                                  @RequestParam("length") int length) {

    int page = start / length; //Calculate page number

    Pageable pageable = PageRequest.of(
            page,
            length ,
            new Sort(
                    Sort.Direction.DESC ,
                    "name"
            )
    ) ;

    Page<MyEntity> responseData = repository.findAll(pageable);

    DataTable dataTable = new DataTable();

    dataTable.setData(responseData.getContent());
    dataTable.setRecordsTotal(responseData.getTotalElements());
    dataTable.setRecordsFiltered(responseData.getTotalElements());

    dataTable.setDraw(draw);
    dataTable.setStart(start);

    return ResponseEntity.ok(dataTable);

}

DataTable Class :

public class DataTable<T> {

    private int draw;
    private int start;
    private long recordsTotal;
    private long recordsFiltered;
    private List<T> data;


    // setter and getter ...

}

javascript :

$('#mainTable').DataTable({
    "processing": true,
    "serverSide": true,
    "pageLength": 10,
    "searching": false,
    "info" : true,
    "ajax": {
        "url": "/my/url/list",
        "method":"get",
        "dataSrc": function (response) {

            var data = response.data; // your data list

            var all = [];

            for (var i = 0; i < data.length; i++) {


                var row = {

                    rows: response.start + i + 1,
                    name: data[i].name, // name ... ,
                    validFrom: data[i].validFrom,
                    validTo: data[i].validTo,
                    amount: data[i].amount,
                    currency: data[i].currency,

                };
                all.push(row);
            }
            return all;
        }

    },
    "columns": [
        { "data": "name"},
        { "data": "validFrom"},
        { "data": "validTo"},
        { "data": "amount"},
        { "data": "currency"}
    ]
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...