Использование пагинации со спецификациями - PullRequest
0 голосов
/ 21 января 2019

Я совершенно новый с нумерацией страниц и ничего не знаю. Никогда не работал с этим. Кто-то сказал мне, что легко и хорошо использовать спецификации для нумерации страниц и прочего. Теперь я успешно реализовал свою спецификацию, но я понятия не имею, как работает разбиение на страницы и как я получу ее на свой веб-интерфейс.

Обычно я получаю список, который отображает все в базе данных. Но когда я использую объект Pagination, мне нужна страница, поэтому я изменил список на Page.

Что я пробовал до сих пор:

SearchController:

public class SucheController {
    @Autowired
    private TelefonbuchRepository telefonbuchRepository;
    private Page<Telefonbuch> eintraege;
    private Telefonbuch telefonbuch = new Telefonbuch();

       public void search(String vorname, String nachname, String telefonnummer, String handynummer) {  
            if (!vorname.isEmpty()) {   
                eintraege = telefonbuchRepository.findAll(TelefonbuchSpecifications.hasVorname(vorname), PageRequest.of(0, 5));
            }

Я не нашел ни одного учебника для этого, поэтому я просто попытался передать свою спецификацию и элемент Pagination. При поиске ошибка:

javax.el.PropertyNotFoundException: Property [id] not found on type [org.springframework.data.domain.PageImpl]

Как это сделать правильно? Знаете ли вы какие-либо учебники или веб-сайты для этого? Я даже не знаю, смогу ли я показать объекты Page на веб-интерфейсе. Я использую JSF с файлами xhtml. Если вам нужна дополнительная информация, скажите мне.

enter image description here

Edit: suche.xhtml по запросу:

<p:dataTable id="table" var="telefonbuch" value="#{sucheController.eintraege}" stickyHeader="true" resizableColumns="true" liveResize="true" style="margin-bottom:20px" paginator="true" rows="10" emptyMessage="Keine Telefonbucheinträge vorhanden" selection="#{telefonbuchList.selectedEntry}" selectionMode="single" rowKey="#{telefonbuch.id}"
                paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                rowsPerPageTemplate="10,20,30">

Теперь я вижу telefonbuch.id в конце первой строки.

1 Ответ

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

Вы правильно реализовали спецификации, убедившись, что ваш репозиторий расширяет JpaSpecificationExecutor, и вызвав findAll(Specification, Pageable) метод

Однако этот метод возвращает объект Page<TelefonBuch>, которыйВы присвоили поле с именем eintraege.Из исключения, которое вы опубликовали, похоже, что вы пытаетесь напрямую получить свойство с именем id поверх вашего eintraege, поэтому я предполагаю, что у вас есть что-то вроде ${eintraege.id} в вашем коде JSF, и это не будетработать, потому что у него нет свойства id.

То, что вы, вероятно, хотели сделать, это перебрать все объекты внутри eintraege и показать ID каждого из них.Это означает, что вам, вероятно, нужно сделать что-то вроде этого:

<c:forEach var="telefonbuch" items="#{eintraege.content}">
    <h:outputText  value="#{telefonbuch.id}" />
</c:forEach>

Здесь происходит то, что мы зацикливаемся на eintraege.getContent(), который возвращает коллекцию, которая может быть повторена.Затем вы должны назначить каждый объект переменной (например, telefonbuch), а затем вы можете вызывать свойства, такие как #{telefonbuch.id}.

...