Чтобы развернуть мои комментарии, я хочу поделиться некоторыми фрагментами кода, чтобы показать, насколько легко реализовать Dandelion Datatables с Thymeleaf. Таким образом, на стороне клиента, у меня есть два файла: HTML для таблицы визуализации
....
<table id="dTable" class="display dataTable" dt:table="true">
<thead>
<tr>
<th th:text="#{requestId}"></th>
<th th:text="#{clientTime}"></th>
<th th:text="#{requestDate}"></th>
<th th:text="#{receiver}"></th>
</tr>
</thead>
</table>
....
и JS для инициализации таблицы
$(document).ready(function() {
$('#dTable').DataTable({
ajax: { url: "/bhost/dtable_list"},
processing: true,
serverSide: true,
bFilter: false,
columns: [
{ data: "requestId" },
{ data: "clientTime" },
{ data: "requestDate" },
{ data: "receiver", orderable: false },
],
lengthMenu: [50, 100, 200, 500],
language: {
thousands: " "
}
});
});
Несмотря на то, что можно настроить одуванчик DataTables только в HTML Я предпочитаю использовать Способ JQuery сделать это, поскольку он более гибкий.
На стороне сервера мы использовали наш собственный слой создается доступ к базе данных (не очень полезно разделить его) и одуванчик DatatablesCriterias класса, чтобы получить текущее состояние таблицы (текущий индекс страницы, длину страницы, выбранный столбец сортировки и т.д.)
Controller
....
@RequestMapping(value = "/dtable_list")
@ResponseBody
public DatatablesResponse<DataDTO> getTableData(HttpServletRequest request) {
HttpSession session = request.getSession();
DataModel model = (DaatModel) session.getAttribute(MODEL_NAME);
DatatablesCriterias criterias = DatatablesCriterias.getFromRequest(request);
List<DataDTO> list = finder.getForCriterias(model, timeZoneOffset, criterias);
Long totalCount = model.getCount();
return DatatablesResponse.build(new DataSet<>(list, totalCount, totalCount), criterias);
}
....
Ключевой особенностью здесь является DatatablesCriterias, поскольку он содержит все необходимые данные для извлечения записей, которые коррелируют с выбором пользователя. И это в значительной степени это (за исключением конфигурации части, я думаю)
Если вы хотите, чтобы ваши данные были представлены в таблице, я могу предложить вам [Dandelion Datatables] (http://dandelion.github.io/components/datatables). Эта структура (построенная на JQuery Datatable) имеет множество функций, готовых к использованию (например, разбиение на страницы, сортировка и т. Д.). И он хорошо работает для больших данных из-за «обработки на стороне сервера». Мы использовали его для представления более миллиона записей, и все работает просто отлично. Я написал о стороне клиента, BTW :) – Enigo
Thx enigo .. Я проверил его, и он выглядит хорошо и прост в использовании .. поэтому он работает хорошо при высоком трафике с миллионными записями (в вопросах скорости загрузки страницы, памяти и потребление процессора)? .. также из любопытства, знаете ли вы, как работает pagedListHolder? Я имею в виду, действительно ли он загружает весь объект в память для каждого пользователя (поскольку он обычно сохраняется в атрибуте сеанса)? Я имею в виду, если у вас есть тысячи записей (даже не десятки тысяч), и у вас есть тысячи одновременных пользователей и сеансов, сервер будет взлетать от перегрузки, верно? –
Да, он работает так же быстро, как ваша серверная сторона может отправлять результаты назад. Ключевой особенностью Datatable для таких задач является «обработка на стороне сервера». В основном это позволяет вам получать записи только для одной конкретной страницы, а не десятки тысяч. Но с другой стороны каждый пользователь действия выполняет (выбор следующей страницы \ prev, сортировка и т. Д.) Выполняется на стороне сервера. Таким образом, задача состоит в том, чтобы заставить сервер работать очень быстро. К сожалению, я ничего не знаю о pagedListHolder, и, похоже, это не очень популярно, согласно результатам google :) – Enigo