Как вы делаете постраничные списки в JavaServer Faces?

У меня есть приложение JSF, которое я конвертирую для использования веб-сервисов вместо прямых запросов к базе данных. Есть несколько очень длинных списков, которые можно легко вернуть с помощью простого SQL-запроса. Я хотел бы разобраться, как реализовать разбиение на страницы с помощью JSF / веб-сервисов. Есть ли хороший шаблон проектирования для создания страничных веб-сервисов?

Если это важно, в настоящее время я использую эталонную реализацию JSF Apache MyFaces с расширениями Tomahawk (набор компонентов JSF, созданных командой разработчиков MyFaces до ее передачи Apache).

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
0
3 588
5

Ответы 5

Мне нравятся объекты запросов Seam: http://docs.jboss.com/seam/2.1.0.BETA1/reference/en-US/html_single/#d0e7527

Они в основном абстрагируют весь SQL / JPA в компоненте Seam, который JSF может легко использовать.

Если вы не хотите использовать шов и / или JPA, вы можете реализовать аналогичный шаблон.

Тринидад имеет компонент таблицы, который поддерживает разбиение на страницы, что может помочь. Это не идеально, но достаточно хорошо работает с Seam, как описано в сообщении блога Пита Мьюира Поддержка таблицы данных Тринидада с помощью Seam.

Если вы не найдете компонент JSF, который вам нравится, вам нужно будет написать свою собственную логику для установки параметров для предел и компенсировать в ваших запросах EJB-QL (JPA).

Это зависит от того, хотите ли вы выполнять подкачку на стороне клиента или на стороне сервера. На стороне сервера ваши веб-службы должны будут включать пару дополнительных параметров (например, «startFrom» и «pageSize»), которые позволят вам указать, какую «страницу» данных нужно получить. Возможно, вашей службе также потребуется вернуть общий размер результата, чтобы вы могли сгенерировать элемент управления разбиением на страницы.

Если вы решите, что это слишком много усилий, вы можете выполнить подкачку страниц на стороне клиента в своем вспомогательном компоненте (или получить компонент, который сделает это за вас), однако это не рекомендуется, если вы говорите о тысячах объектов!

Мы использовали библиотеку RichFaces Datatable: http://livedemo.exadel.com/richfaces-demo/richfaces/dataTable.jsf?tab=usage

Это довольно просто, и если вы еще не используете RichFaces, В самом деле легко интегрировать с MyFaces.

Если вы получаете все результаты сразу от веб-службы и не можете включить разбиение на страницы в фактический вызов веб-службы, вы можете попробовать установить для списка элементов свойство в управляемом компоненте. Затем вы можете связать это с атрибутом "value" в таблице данных Tomahawk:

http://myfaces.apache.org/tomahawk-project/tomahawk/tagdoc/t_dataTable.html

а затем вы можете использовать Tomahawk dataScroller для разбивки на страницы списка элементов, хранящихся в этом свойстве. Вот ссылка на этот компонент, он хорошо работает с компонентом dataTable:

http://myfaces.apache.org/tomahawk-project/tomahawk/tagdoc/t_dataScroller.html

Вы можете включить это в фасеты верхнего / нижнего колонтитула dataTable или в качестве отдельного дополнения (вам нужно будет указать идентификатор dataTable в атрибуте 'for' объекта dataScroller.

Есть и другие полезные вещи, которые вы можете делать с помощью dataTable, например, сортировку и переключение деталей для каждой строки, но это можно реализовать, как только вы получите базовую разбивку на страницы.

Надеюсь, это поможет!

Другие вопросы по теме