it-swarm.com.de

Umstellung der Liste auf Seite im Frühjahr

Ich versuche, die Liste im Frühjahr in eine Seite umzuwandeln. Ich habe es mit konvertiert 

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

Aber jetzt habe ich Probleme mit dem Sortieren und der Paginierung. Wenn ich versuche, Größe und Seite zu übergeben, funktioniert die Paginierung nicht.

Hier ist der Code, den ich verwende.

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

Hier ist mein Benutzer Repo

public interface UserRepo extends JpaRepository<User, Integer>{

public List<User> findAllByProgramId(Integer programId);

Hier ist mein Dienst

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

Ich habe die gleiche Frage gestellt. Ich habe das mit subList gelöst, das heißt:

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

Wie in der reference documentation angegeben, unterstützen Spring Data-Repositorys die Paginierung von Abfragemethoden, indem sie einfach einen Parameter des Typs Pageable deklarieren, um sicherzustellen, dass nur die für die angeforderte Page erforderlichen Daten gelesen werden.

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

Das würde ein Page-Objekt mit der in Ihrem Pageable-Objekt definierten Seitengröße/Einstellungen zurückgeben. Sie müssen keine Liste abrufen und dann versuchen, eine Seite daraus zu erstellen.

11
dubonzi

Sie sollten es tun, wie von den Dubonzis answer empfohlen.

Wenn Sie die Paginierung für ein gegebenes List dennoch verwenden möchten, verwenden Sie 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

Wenn Sie sortieren möchten, verwenden Sie einen anderen PagedListHolder-Konstruktor mit einer 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

Vielen Dank Jungs unten Code funktioniert in meinem Fall

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

Dies könnte die Lösung sein. Sortieren und Paginieren funktioniert auch so:

Regler:

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

Bedienung:

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

Repository:

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

Auf diese Weise können wir auch andere Entity-Seiten zurückgeben.

0
Ashish

Haben Sie versucht, Ihr Repository auf PagingAndSortingRepository zu erweitern?

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

Bedienung  

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

Ich gehe davon aus, dass Sie eine Schnittstelle zum Dienst verwenden: 

0
Borgy Manotoy

Es gibt eine Page Implementierung dafür:

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