Как включить поиск / фильтр в таблицу, а также включить разбиение на страницы в Java SpringBoot? - PullRequest
0 голосов
/ 23 января 2019

Я создаю веб-приложение, используя Java Spring Boot и thymeleaf. Я знаю, как включить пагинацию в это. Я перешел по этой ссылке https://dzone.com/articles/pagingandsortingrepository-how-to-use-with-thymele

Теперь проблема в том, как включить форму поиска / фильтрации и как включить подкачку в результаты поиска? Я знаю, что могу использовать CriteriaBuilder (например, функцию findBuildings () ниже), чтобы получать результаты поиска, но как включить в них подкачку?

частный EntityManager em; Публичный список findBuildings (Здание с поискомBuilding) {

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Building> cq = cb.createQuery(Building.class);
    Root<Building> quest = cq.from(Building.class);
    List<Predicate> predicates = new ArrayList<Predicate>();

    if (searchedBuilding.getAddress() != null) {
        predicates.add(cb.equal(quest.get("Address"), "%" + searchedBuilding.getAddress()+ "%"));
    }
    if (searchedBuilding.getBuildingType() != null) {
        predicates.add(cb.like(quest.get("BuildingType"), "%" + searchedBuilding.getBuildingType() + "%"));
    }
    // other predicates

    cq.select(quest).where(predicates.toArray(new Predicate[] {}));
    List<Building> buildings = em.createQuery(cq).getResultList();
    return buildings;
}

Ответы [ 2 ]

0 голосов
/ 23 января 2019

После createQuery(), вместо того, чтобы позвонить getResultList(), вы должны сделать следующее:

public List findBuildings(Building search, int firstResult, int pageSize) {

    //omitted ...

    Query query = em.createQuery(cq);
    query.setFirstResult(firstResult);
    query.setMaxResults(pageSize);
    List<Building> buildings = query.getResultList();
    return buildings;
}

Где firstResult и maxResult рассчитаны.

Например, если страница 1 с 50 элементами на каждой странице->

firstResult = 0

maxResults = 50

0 голосов
/ 23 января 2019

Вы можете использовать данные пружины (https://spring.io/projects/spring-data).

Создать интерфейс репозитория и создать свой запрос следующим образом:

@Query(value = "select distinct b from Building b where b.Address like %:searchParam%")
Page<Building> search(Pageable pageable, @Param("searchParam") String searchParam);

Вы можете получить интерфейс Pageable в вашемКонтроллер выглядит так:

@GetMapping("/your/path/{searchParam}")
public ModelAndView getBuilding(Pageable pageable, @PathVariable String searchParam) {
    Page<Building> page = buildingRepository.search(peageable, searchParam);
    ....
    //your code here
}

В URL вы можете передать размер и текущую страницу.

https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Pageable.html

...