[英]Spring Data Pagination & AJAX
我有以下控制器,我刚刚将分页包括在返回的结果中
@RequestMapping(value = "/search/{person}", produces="application/json", method = RequestMethod.GET)
public Page<Person> findAllPersons(@PathVariable String person) {
Page<Person> list = personRepo.findAll(new PageRequest(1, PAGE_SIZE));
return list;
}
我现在正在尝试弄清楚如何真正查看这些结果-在Person表上的搜索是它自己的AJAX请求,在UI工具上选择“下一个”或“上一个”可以启动它自己的GET
<a id="previous" href="onclick="setPageNumber(1)">
<a id="next" href="onclick="setPageNumber(2)">
function setPageNumber(num) { //relaunch request with page number value retrieved from previous or next}
我应该像这样将pageNumber作为@PathVariable
包括在内:
@RequestMapping(value = "/search/{person}/{pageNumber}", produces="application/json", method = RequestMethod.GET)
public Page<Person> findAllPersons(@PathVariable String person, @PathVariable int pageNumber) {
Page<Person> list = personRepo.findAll(new PageRequest(pageNumber, PAGE_SIZE));
return list;
}
还是应该将pageNumber设置为一个完全独立的控制器方法,以某种方式使用pageNumber参数调用findAllPersons
? 我可能在这里使自己感到困惑-欢迎任何输入,谢谢!
对于REST服务,我将其放在参数中,而不是URI page_start = X&page_size = Y。
我知道这篇文章很长时间没有活跃,但是对于仍然在寻找将Spring分页与Ajax结合使用的任何人,这里有一些可能的解决方案:
1.如果您的存储库是JpaRepository
的实例(或更确切地说是PagingAndSortingRepository
),则可以简单地将Pageable
传递给它:
@Controller
public class FooController {
//...
@GetMapping("/foo/list")
public List<Foo> handleList(Pageable pageable) {
return fooRepository.findAll(pageable);
}
//...
}
2.除了Pageable
,您还可以将分页参数检索为@RequestParam
并自己创建一个PageRequest
。 如果项目不使用Spring Data和JPA,则此方法可能很有用:
@Controller
public class FooController {
//...
@GetMapping("/foo/list")
public List<Foo> handleList(
@RequestParam(value = "size", required = false) Optional<Integer> pageSize,
@RequestParam(value = "page", required = false) Optional<Integer> pageNumber,
@RequestParam(value = "sort", required = false) Sort sort,
) {
PageRequest pageable = new PageRequest(pageNumber.orElse(0), pageSize.orElse(10), sort);
return fooRepository.customfindAll(pageable);
}
//...
}
(例如高于该存储库可能是延伸的JDBCRepository类如这一个 )
对于这两种可能的解决方案的AJAX部分,可以使用类似的方法:
// ... handle pageNo, listSize etc.
var url = '/yourprj/foo/list?page=' + pageNo + '&size=' + listSize
$.ajax({
type: "GET",
contentType: "application/json",
url: url,
success: function(result) {
// handle Foo list...
}
});
3.或者,如果您使用Thymeleaf + Spring Data ,则有一种方言可以自动添加分页。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.