use*_*109 37 java spring pagination list spring-data
我试图在春天将列表转换为页面.我用它转换了它
new PageImpl(users,pageable,users.size());
但现在我有排序和分页本身的问题.当我尝试传递大小和页面时,分页不起作用.
这是我正在使用的代码.
我的控制器
public ResponseEntity<User> getUsersByProgramId(
@RequestParam(name = "programId", required = true) Integer programId Pageable pageable) {
List<User> users = userService.findAllByProgramId(programId);
Page<User> pages = new PageImpl<User>(users, pageable, users.size());
return new ResponseEntity<>(pages, HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)
这是我的用户回购
public interface UserRepo extends JpaRepository<User, Integer>{
public List<User> findAllByProgramId(Integer programId);
Run Code Online (Sandbox Code Playgroud)
这是我的服务
public List<User> findAllByProgramId(Integer programId);
Run Code Online (Sandbox Code Playgroud)
shi*_*slm 60
我遇到了同样的问题.我使用subList解决了这个问题,即:
int start = pageable.getOffset();
int end = (start + pageable.getPageSize()) > users.size() ? users.size() : (start + pageable.getPageSize());
Page<User> pages = new PageImpl<User>(users.subList(start, end), pageable, users.size());
Run Code Online (Sandbox Code Playgroud)
小智 19
有一个Page实现:
Page<Something> page = new PageImpl<>(yourList);
Run Code Online (Sandbox Code Playgroud)
dub*_*nzi 13
如参考文档中所示,Spring Data存储库通过简单地声明类型参数Pageable来确保它们只读取所请求的数据,从而支持对查询方法的分页Page.
Page<User> page = findAllByProgramId(Integer programId, Pageable pageable);
Run Code Online (Sandbox Code Playgroud)
这将返回一个Page对象,其中包含对象中定义的页面大小/设置Pageable.无需获取列表,然后尝试创建一个页面.
这可能是解决方案。排序和分页也可以这样工作:
控制器:
public ResponseEntity<User> getUsersByProgramId(
@RequestParam(name = "programId", required = true) Integer programId Pageable pageable) {
Page<User> usersPage = userService.findAllByProgramId(programId, pageable);
Page<User> pages = new PageImpl<User>(usersPage.getContent(), pageable, usersPage.getTotalElements());
return new ResponseEntity<>(pages, HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)
服务:
Page<User> findAllByProgramId(Integer programId, Pageable pageable);
Run Code Online (Sandbox Code Playgroud)
存储库:
public interface UserRepo extends JpaRepository<User, Integer>{
public Page<User> findAllByProgramId(Integer programId, Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)
这样,我们也可以返回实体的不同页面。
在 JHipster 框架中,有一个用于此类操作的接口PageUtil:
static <T> Page<T> createPageFromList(List<T> list, Pageable pageable) {
if (list == null) {
throw new IllegalArgumentException("To create a Page, the list mustn't be null!");
}
int startOfPage = pageable.getPageNumber() * pageable.getPageSize();
if (startOfPage > list.size()) {
return new PageImpl<>(new ArrayList<>(), pageable, 0);
}
int endOfPage = Math.min(startOfPage + pageable.getPageSize(), list.size());
return new PageImpl<>(list.subList(startOfPage, endOfPage), pageable, list.size());
}
Run Code Online (Sandbox Code Playgroud)
小智 5
Try This:
public Page<Patient> searchPatientPage(SearchPatientDto patient, int page, int size){
List<Patient> patientsList = new ArrayList<Patient>();
Set<Patient> list=searchPatient(patient);
patientsList.addAll(list);
int start = new PageRequest(page, size).getOffset();
int end = (start + new PageRequest(page, size).getPageSize()) > patientsList.size() ? patientsList.size() : (start + new PageRequest(page, size).getPageSize());
return new PageImpl<Patient>(patientsList.subList(start, end), new PageRequest(page, size), patientsList.size());
}
Run Code Online (Sandbox Code Playgroud)
您应该像dubonzi的答案所建议的那样去做。
如果您仍想对给定的List使用PagedListHolder使用分页:
List<String> list = // ...
// Creation
PagedListHolder page = new PagedListHolder(list);
page.setPageSize(10); // number of items per page
page.setPage(0); // set to first page
// Retrieval
page.getPageCount(); // number of pages
page.getPageList(); // a List which represents the current page
Run Code Online (Sandbox Code Playgroud)
如果需要排序,请使用另一个具有MutableSortDefinition的PagedListHolder构造函数。