使用 JS/jQuery/AJAX 和控制器在 Java 中分页
Pagination in Java using JS/jQuery/AJAX and controllers
我有这样的问题:我需要在 jsp 上实现分页。我正在使用 jQuery DataTable,但我想有自己的分页。我有 return 我的页面控制器和 return 我的数据库中元素数量的控制器。
@RequestMapping(value = "/all-events", params = { "page", "size" }, method = RequestMethod.GET, produces = "application/json")
public @ResponseBody List<EventDto> getAllEventsPaging(
@RequestParam(value = "page") Integer page,
@RequestParam(value = "size") Integer size) {
List<EventDto> events = eventService.getAllEventsPaging(page, size);
return events;
}
@RequestMapping(value = "/paging", method = RequestMethod.GET)
public String getAllEventsPaging(@RequestParam("size") Long size,Model model) {
Long dataBaseSize = eventRepository.count();
Long amount;
if (dataBaseSize % size == 0){
amount = dataBaseSize % size;
} else{
amount = dataBaseSize % size + 1;
}
model.addAttribute("amount", amount);
return "amount";
}
然后我有构建 table:
的 js 文件
$(document)
.ready(
function() {
size = $(
"#request_table_obtain_length option:selected")
.val();
table = $("table.table-bordered")
.dataTable(
{
"sAjaxDataProp" : "",
"fnInitComplete" : function(settings,
json) {
},
"fnRowCallback" : function(nRow, aData,
iDisplayIndex,
iDisplayIndexFull) {
var ul = $("<ul/>", {
'class' : "dropdown-menu"
});
var li = $("<li/>");
var div = $("<div/>", {
"class" : "input-group-btn"
});
},
"bProcessing" : false,
"bServerSide" : false,
"bPaginate" : false,
"bFilter" : false,
"bInfo" : false,
"sAjaxSource" : "all-events?page="
+ page + "&size=" + size,
"aoColumns" : [
{
"mData" : function(data,
type, full) {
return '<a href=event?id='
+ data.id
+ '>'
+ data.name
+ '</a>';
}
},
{
"mData" : "startDate",
"mRender" : function(data,
type, full) {
return new Date(data)
.toLocaleString()
.split(" ")[0];
}
},
{
"mData" : function(data,
type, full) {
return data.city.city
+ ", "
+ data.address;
}
},
{
"mData" : "priceCategory",
"mRender" : function(data,
type, full) {
return data.priceCategory;
}
},
{
"mData" : "website"
},
{
"mData" : function(data,
type, full) {
return data.owner.firstName
+ " "
+ data.owner.lastName;
}
} ]
});
table
.on(
'draw',
function() {
if (table.fnSettings().sAjaxSource
.indexOf("all-events") > -1) {
$(
'.dropdown-menu>li>a:contains("Reject"),a:contains("Approve")')
.hide();
} else {
$(
'.dropdown-menu>li>a:contains("Refuse"),a:contains("Send Again")')
.hide();
}
});
$("#request_table_obtain_length > label > select").change(
function() {
size = $(this).val();
showEvents();
});
});
在我的 jsp 上,我有一个下拉菜单,可以帮助我选择我想在页面上看到多少元素。我接受这个参数(大小)并将它发送给我请求两个参数的控制器。主要问题是我应该如何在 jsp 上构建分页字段,以及如何将第二个参数发送到控制器(可能使用 ajax 或 jQuery)。带有分页和下拉菜单的 jsp 片段如下所示:
<div class="box-body table-responsive">
<select id="request_table_obtain_length" class="dataTableDropDown">
<option selected="selected" value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
<option value="100">100</option>
</select>
<table id="request_table_obtain"
class="table table-bordered table-striped">
<thead>
<tr>
<th><spring:message code="label.eventTitle" /></th>
<th><spring:message code="label.startDate" /></th>
<th><spring:message code="label.location" /></th>
<th><spring:message code="label.price" /></th>
<th><spring:message code="label.website" /></th>
<th><spring:message code="label.organizer" /></th>
</tr>
</thead>
</table>
<div class="box-footer clearfix">
<ul class="pagination pagination-sm no-margin pull-right">
<li><a href="#">«</a></li>
<li><a href="#">1</a></li>
<li><a href="#">»</a></li>
</ul>
</div>
</div>
您需要跟踪记录显示的页面。
您还需要用于上一页和下一页的导航按钮(或链接)。
如果有更多记录要显示,将显示“下一步”按钮。
单击此按钮后,您将发送 ajax 下一页请求。
如果当前页面不是第一页,将显示上一页按钮。
单击此按钮后,您将发送 ajax 请求上一页。
最终您可以将加载的记录存储在本地数组中,并引用它们而不是每次为已访问的页面调用服务器。
我已经在类似 post.
中展示了此功能的代码
我有这样的问题:我需要在 jsp 上实现分页。我正在使用 jQuery DataTable,但我想有自己的分页。我有 return 我的页面控制器和 return 我的数据库中元素数量的控制器。
@RequestMapping(value = "/all-events", params = { "page", "size" }, method = RequestMethod.GET, produces = "application/json")
public @ResponseBody List<EventDto> getAllEventsPaging(
@RequestParam(value = "page") Integer page,
@RequestParam(value = "size") Integer size) {
List<EventDto> events = eventService.getAllEventsPaging(page, size);
return events;
}
@RequestMapping(value = "/paging", method = RequestMethod.GET)
public String getAllEventsPaging(@RequestParam("size") Long size,Model model) {
Long dataBaseSize = eventRepository.count();
Long amount;
if (dataBaseSize % size == 0){
amount = dataBaseSize % size;
} else{
amount = dataBaseSize % size + 1;
}
model.addAttribute("amount", amount);
return "amount";
}
然后我有构建 table:
的 js 文件$(document)
.ready(
function() {
size = $(
"#request_table_obtain_length option:selected")
.val();
table = $("table.table-bordered")
.dataTable(
{
"sAjaxDataProp" : "",
"fnInitComplete" : function(settings,
json) {
},
"fnRowCallback" : function(nRow, aData,
iDisplayIndex,
iDisplayIndexFull) {
var ul = $("<ul/>", {
'class' : "dropdown-menu"
});
var li = $("<li/>");
var div = $("<div/>", {
"class" : "input-group-btn"
});
},
"bProcessing" : false,
"bServerSide" : false,
"bPaginate" : false,
"bFilter" : false,
"bInfo" : false,
"sAjaxSource" : "all-events?page="
+ page + "&size=" + size,
"aoColumns" : [
{
"mData" : function(data,
type, full) {
return '<a href=event?id='
+ data.id
+ '>'
+ data.name
+ '</a>';
}
},
{
"mData" : "startDate",
"mRender" : function(data,
type, full) {
return new Date(data)
.toLocaleString()
.split(" ")[0];
}
},
{
"mData" : function(data,
type, full) {
return data.city.city
+ ", "
+ data.address;
}
},
{
"mData" : "priceCategory",
"mRender" : function(data,
type, full) {
return data.priceCategory;
}
},
{
"mData" : "website"
},
{
"mData" : function(data,
type, full) {
return data.owner.firstName
+ " "
+ data.owner.lastName;
}
} ]
});
table
.on(
'draw',
function() {
if (table.fnSettings().sAjaxSource
.indexOf("all-events") > -1) {
$(
'.dropdown-menu>li>a:contains("Reject"),a:contains("Approve")')
.hide();
} else {
$(
'.dropdown-menu>li>a:contains("Refuse"),a:contains("Send Again")')
.hide();
}
});
$("#request_table_obtain_length > label > select").change(
function() {
size = $(this).val();
showEvents();
});
});
在我的 jsp 上,我有一个下拉菜单,可以帮助我选择我想在页面上看到多少元素。我接受这个参数(大小)并将它发送给我请求两个参数的控制器。主要问题是我应该如何在 jsp 上构建分页字段,以及如何将第二个参数发送到控制器(可能使用 ajax 或 jQuery)。带有分页和下拉菜单的 jsp 片段如下所示:
<div class="box-body table-responsive">
<select id="request_table_obtain_length" class="dataTableDropDown">
<option selected="selected" value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
<option value="100">100</option>
</select>
<table id="request_table_obtain"
class="table table-bordered table-striped">
<thead>
<tr>
<th><spring:message code="label.eventTitle" /></th>
<th><spring:message code="label.startDate" /></th>
<th><spring:message code="label.location" /></th>
<th><spring:message code="label.price" /></th>
<th><spring:message code="label.website" /></th>
<th><spring:message code="label.organizer" /></th>
</tr>
</thead>
</table>
<div class="box-footer clearfix">
<ul class="pagination pagination-sm no-margin pull-right">
<li><a href="#">«</a></li>
<li><a href="#">1</a></li>
<li><a href="#">»</a></li>
</ul>
</div>
</div>
您需要跟踪记录显示的页面。 您还需要用于上一页和下一页的导航按钮(或链接)。
如果有更多记录要显示,将显示“下一步”按钮。 单击此按钮后,您将发送 ajax 下一页请求。
如果当前页面不是第一页,将显示上一页按钮。 单击此按钮后,您将发送 ajax 请求上一页。
最终您可以将加载的记录存储在本地数组中,并引用它们而不是每次为已访问的页面调用服务器。
我已经在类似 post.
中展示了此功能的代码