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);
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());
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.
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 .
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());
}
//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;
}
}
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é.
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:
Il existe une implémentation Page
pour cela:
Page<Something> page = new PageImpl<>(yourList);