2016-06-10 2 views
11

나는 목록을 봄으로 페이지로 변환하려고합니다. 나는 그것을 사용하여 변환했다.목록에서 봄의 페이지로 변환

새로운 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); 
} 

여기 여기 내 서비스

내가 같은 질문을 충족해야
public List<User> findAllByProgramId(Integer programId); 
+0

이 보인다. 테이블의 모든 요소를 ​​검색 한 다음 'PageImpl'로 래핑합니다. 그러나'PageRequest'를 서비스 내부 저장소에 전달하여 제대로 작동하도록해야합니다. 또한 서비스 메소드 및 저장소의 코드를 게시 할 수 있습니까? –

+0

그래, 나는 그들을 게시 할 것이지만 그들은 Impl 메서드에 관해서는 꽤 길이라고 확신한다. 하지만 저장소 하나를 게시 할 것입니다 – user3127109

답변

20

내 사용자 리포

public interface UserRepo extends JpaRepository<User, Integer>{ 

public List<User> findAllByProgramId(Integer programId); 

입니다. 나는이 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()); 

약간 어리 석고, 희망은 당신을 도울 수있다. :)이 reference documentation에 나타난 바와 같이

+0

내 경우에는 작동하지 않습니다! 그리고 list.size()는 users.size()를 의미합니까? – user3127109

+0

@ user3127109 예, users.size()입니다. 수정했습니다. – shilaimuslm

+2

하지만 여전히 친구가 아닙니다! – user3127109

4

, 봄의 데이터는 단순히 그들이 단지 요구 Page에 필요한 데이터를 읽고 있는지 확인 유형 Pageable의 매개 변수를 선언하여 쿼리 방법에 대한 지원 페이지 매김을 레포지토리. 당신의 Pageable 객체에 정의 된 페이지 크기/설정으로 Page 객체를 반환

Page<User> page = findAllByProgramId(Integer programId, Pageable pageable); 

. 목록을 가져온 다음 목록에서 페이지를 만들지 않아도됩니다.

int start = pageble.getOffset(); 
    int end = (start + pageble.getPageSize()) > vehicleModelsList.size() ? vehicleModelsList.size() : (start + pageble.getPageSize()); 
-2

고마워 내 사건에서 일하고?

public interface UserRepo extends PagingAndSortingRepository<Ticket, Integer> { 
    Page<User> findAllByProgramId(Integer programId, Pageable pageable); 
} 

서비스

Page<User> findAllByProgramId(Integer programId, Pageable pageable); 

당신이 서비스에 인터페이스를 사용하는 가정은 잘못된 방법으로 그것을 사용하는 것처럼

+0

StackOverflow에 오신 것을 환영합니다! 이 답변은 [이 답변] (http://stackoverflow.com/a/37771947/5488275)과 다른 점은 무엇입니까? 그것이 동일하다면, 대답을 다시 생각해보십시오. (여전히 여기에 있어야하는지 여부) 이미 주어진 답을 upvote하십시오. –

0

당신이 PagingAndSortingRepository에 저장소를 확장 시도 해 봤나 코드 아래