web-dev-qa-db-fra.com

Conversion de liste en page au printemps

J'essaie de convertir liste en page au printemps. Je l'ai converti en utilisant 

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

Mais maintenant, j'ai des problèmes avec le tri et la pagination elle-même. Lorsque j'essaie de passer la taille et la page, la pagination ne fonctionne pas.

Voici le code que j'utilise.

Mon contrôleur

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

Voici mon utilisateur Repo

public interface UserRepo extends JpaRepository<User, Integer>{

public List<User> findAllByProgramId(Integer programId);

Voici mon service

    public List<User> findAllByProgramId(Integer programId);
24
user3127109

J'ai rencontré la même question. J'ai résolu ceci en utilisant subList, c'est-à-dire:

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

Comme indiqué dans la référence documentation , les référentiels Spring Data prennent en charge la pagination des méthodes de requête en déclarant simplement un paramètre de type Pageable pour s’assurer qu’ils ne lisent que les données nécessaires pour la Page demandée.

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

Cela renverrait un objet Page avec la taille de page/les paramètres définis dans votre objet Pageable. Pas besoin d’obtenir une liste et d’essayer ensuite de créer une page.

11
dubonzi

Vous devriez le faire comme conseillé par le/dubonzi répondre .

Si vous souhaitez toujours utiliser la pagination pour une List donnée, utilisez 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

Si vous avez besoin de trier, utilisez un autre constructeur PagedListHolder avec un MutableSortDefinition .

3
Willi Mentzel
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());
    }
0
naveen kumar
//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;
   } 

}
0
RBuser2769569

Cela pourrait être la solution. Le tri et la pagination fonctionneront aussi de cette façon:

Manette:

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

Un service:

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

Dépôt:

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

De cette façon, nous pouvons aussi retourner différentes pages d'entité.

0
Ashish

Avez-vous essayé d'étendre votre référentiel à PagingAndSortingRepository?

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

Un service  

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

Je suppose que vous utilisez l'interface avec le service: 

0
Borgy Manotoy

Il existe une implémentation Page pour cela:

Page<Something> page = new PageImpl<>(yourList);
0
Sachin Gaur