봄철 목록 페이지 전환
봄에 목록을 페이지로 변환하려고 합니다.를 사용하여 변환했습니다.
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);
}
여기 내 사용자 Repo가 있습니다.
public interface UserRepo extends JpaRepository<User, Integer>{
public List<User> findAllByProgramId(Integer programId);
여기 제 서비스가 있습니다
public List<User> findAllByProgramId(Integer programId);
저도 같은 문제가 있었어요.subList 사용:
final int start = (int)pageable.getOffset();
final int end = Math.min((start + pageable.getPageSize()), users.size());
final Page<User> page = new PageImpl<>(users.subList(start, end), pageable, users.size());
이를 위한 구현이 있습니다.
Page<Something> page = new PageImpl<>(yourList);
참조 문서에 나와 있는 것처럼 스프링 데이터 저장소는 유형의 매개 변수를 선언하는 것만으로 쿼리 메서드에 대한 페이지 매김을 지원합니다.Pageable
요청한 데이터만 읽고 있는지 확인합니다.Page
.
Page<User> page = findAllByProgramId(Integer programId, Pageable pageable);
그러면 A가 돌아오다Page
에서 정의된 페이지 크기/패킷을 가진 오브젝트Pageable
물건.목록을 가져온 다음 이 목록에서 페이지를 만들 필요가 없습니다.
당신은 두본지의 대답에 따라 그것을 해야 합니다.
특정 페이지 번호 부여를 계속 사용하려는 경우List
Paged List Holder 사용:
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
정렬이 필요한 경우 MutableSortDefinition과 함께 다른 PagedListHolder 생성자를 사용하십시오.
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());
}
이게 해결책일 수도 있어정렬 및 페이지 매김도 다음과 같이 작동합니다.
컨트롤러:
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);
}
서비스:
Page<User> findAllByProgramId(Integer programId, Pageable pageable);
저장소:
public interface UserRepo extends JpaRepository<User, Integer>{
public Page<User> findAllByProgramId(Integer programId, Pageable pageable);
}
이렇게 하면 엔티티의 다른 페이지도 반환할 수 있습니다.
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());
}
이 범용 기능을 사용하여 List를 페이지로 변환할 수 있습니다.
public static<T> Page<T> convertToPage(List<T> objectList, Pageable pageable){
int start = (int) pageable.getOffset();
int end = Math.min(start+pageable.getPageSize(),objectList.size());
List<T> subList = start>=end?new ArrayList<>():objectList.subList(start,end);
return new PageImpl<>(subList,pageable,objectList.size());
}
@shilaimuslm 코멘트에 근거해 실장됩니다.이 경우 start >가 subList로 끝나는 경우 예외가 느려지지 않습니다.
List<User> users = // ...
Pageable paging = PageRequest.of(pagePagination, sizePagination);
int start = Math.min((int)paging.getOffset(), users.size());
int end = Math.min((start + paging.getPageSize()), users.size());
Page<User> page = new PageImpl<>(users.subList(start, end), paging, users.size());
//1) For a boot application create a paging repository interface
public interface PersonRepository extends PagingAndSortingRepository<Person,
String> {
// Common CURD method are automatically implemented
}
//2) create a service Interface
public interface PersonService {
Page<Person> listAllByPage(Pageable pageable); // Use common CURD findAll() method
Page<Object> listSpecByPage(Pageable pageable, String x);
}
//3) create a service Impl Class of service interface
@Service
public class PersonServiceImpl implements PersonService {
final PersonRepository personRepository;
@Autowired
PersonServiceImpl(PersonRepository personRepository){
this.personRepository = personRepository;
}
@Override
public Page<Person> listAllByPage(Pageable pageable) {
return personRepository.findAll(pageable);
}
@Override
public Page<Object> listSpecByPage(Pageable pageable, String path) {
List<Object> objectlist = new ArrayList<Object>();
// Do your process to get output in a list by using node.js run on a *js file defined in 'path' varriable
Page<Object> pages1 = new PageImpl<Object>(objectlist, pageable, objectlist.size());
return pages1;
}
}
//4) write your controller
public class PersonController {
final PersonService personService;
@Autowired
PersonController( PersonService personService ){
this.personService = personService;
}
@GetMapping("/get") // Use of findALL() function
Page<Person> listed( Pageable pageable){
Page<Person> persons = personService.listAllByPage(pageable);
return persons;
}
@GetMapping("/spec") // Use of defined function
Page<Object> listSpec( Pageable pageable, String path){
Page<Object> obj = personService.listSpecByPage(pageable, path);
return obj;
}
}
내 경우에는 코드 아래가 작동해서 고마워.
int start = pageble.getOffset();
int end = (start + pageble.getPageSize()) > vehicleModelsList.size() ? vehicleModelsList.size() : (start + pageble.getPageSize());
저장소 확장을 시도해 보셨습니까?PagingAndSortingRepository
?
public interface UserRepo extends PagingAndSortingRepository<Ticket, Integer> {
Page<User> findAllByProgramId(Integer programId, Pageable pageable);
}
서비스
Page<User> findAllByProgramId(Integer programId, Pageable pageable);
서비스에 대한 인터페이스를 사용하고 있을 것으로 생각됩니다.
어레이 리스트 전체를 취득하는 대신에, 요건에 따라서 서브 블리스트를 취득합니다.요청 본문의 '페이지 가능' 개체에서 '오프셋' 및 크기를 가져옵니다.
new PageImpl<User>(users.subList(start, end), pageable, users.size());
이것은 리스트의 페이지 지정에 대한 정답입니다.
public ResponseEntity<User> getUsersByProgramId(
@RequestParam(name = "programId", required = true) Integer programId, Pageable pageable) {
List<User> users = userService.findAllByProgramId(programId);
final int toIndex = Math.min((pageable.getPageNumber() + 1) * pageable.getPageSize(),
bidList.size());
final int fromIndex = Math.max(toIndex - pageable.getPageSize(), 0);
Page<User> pages = new PageImpl<User>(users.subList(fromIndex, toIndex), pageable, users.size());
return new ResponseEntity<>(pages, HttpStatus.OK);
}
호출된 결과를 만들지 않았습니다.
new PageImpl<User>(users, pageable, users.size());
암묵적으로 페이지 결과를 만들지 않습니다.
이 문맥에서pageable
인수는 페이지 오브젝트의 메타데이터(페이지, 오프셋, 크기 등)를 만듭니다.기타
따라서 다음과 같은 Repository 메서드를 사용해야 합니다.
Page<User>findAllByProgramId(Integer programId, Pageable pageable);
언급URL : https://stackoverflow.com/questions/37749559/conversion-of-list-to-page-in-spring
'programing' 카테고리의 다른 글
ng-model에서의 패스 함수 (0) | 2023.03.05 |
---|---|
WordPress: 첨부된 이미지의 높이와 폭을 가져옵니다. (0) | 2023.03.05 |
React가 DOM을 직접 관리하지 않는 지역에서는 브라우저에서 ReactDOMServer.renderToString을 사용해도 됩니까? (0) | 2023.03.05 |
MODE COLUM IN oracle - NULL로 설정하기 전에 열이 NULL인지 확인하는 방법 (0) | 2023.02.28 |
'문서 지향'과Key-Value는 MongoDB와 Cassandra에 대해 이야기할 때 의미합니까? (0) | 2023.02.28 |