2016-06-10 19 views
11

Sto provando a convertire l'elenco in pagina in primavera. L'ho convertito usandoConversione dell'elenco alla pagina in primavera

new PageImpl (utenti, pageable, users.size());

Ma ora ho problemi con l'ordinamento e la paginazione stessa. Quando provo a passare la dimensione e la pagina, l'impaginazione non funziona.

Ecco il codice che sto usando.

mio controller

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); 
} 

Ecco il mio utente Repo

public interface UserRepo extends JpaRepository<User, Integer>{ 

public List<User> findAllByProgramId(Integer programId); 

Ecco il mio servizio

public List<User> findAllByProgramId(Integer programId); 
+0

Sembra come lo si utilizza in modo sbagliato. Ritratti tutti gli elementi della tabella, quindi li racchiudi in 'PageImpl'. Ma dovresti passare 'PageRequest' al repository all'interno del tuo servizio per farlo funzionare. Puoi anche pubblicare il codice del tuo metodo di servizio e repository? –

+0

Sì, certo che li posterò ma sono abbastanza lunghi per quanto riguarda il metodo Impl. Ma posterò il repository uno – user3127109

risposta

20

ho soddisfare la stessa domanda. Ho risolto questo utilizzando la sottolista, ovvero:

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()); 

Può essere un po 'stupido, la speranza può aiutarti. :)

+0

Non funziona nel mio caso! E il tuo list.size() significa users.size()? – user3127109

+0

@ user3127109 sì, è users.size(), l'ho corretto. – shilaimuslm

+2

Ma ancora non funziona compagno! – user3127109

4

Come indicato nella reference documentation, Primavera dati repository supporto impaginazione su metodi di query, semplicemente dichiarando un parametro di tipo Pageable per assicurarsi che stanno solo leggendo i dati necessari per la richiesta Page.

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

che restituirebbe un oggetto Page con il formato pagina/impostazioni definite nel Pageable oggetto. Non c'è bisogno di ottenere una lista e quindi provare a crearne una pagina.

-2

Grazie ragazzi al di sotto del codice sta lavorando nel mio caso

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

Benvenuti in StackOverflow! In che modo questa risposta è diversa da [questa risposta] (http://stackoverflow.com/a/37771947/5488275)? Se è la stessa cosa, ripensa la tua risposta (se dovrebbe essere ancora qui) e modifica la risposta già data. –

0

Hai provato estendere il repository per PagingAndSortingRepository?

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

Servizio

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

presumo che si sta utilizzando l'interfaccia al servizio: