2011-01-04 6 views
1

У меня есть приложение на основе JBoss Seam, RichFaces и Hibernate/JPA. Я создал класс DAO и пару классов бизнес-уровня, которые используются для извлечения данных на основе различных критериев. (Получить последние, просмотреть все и т. Д.). Я хотел бы вернуть эти результаты и отобразить их для пользователя, что позволит пользователю прорисовывать их через них. Однако, поскольку возвращаемые объекты могут быть довольно большими (и существует большое количество объектов), я бы предпочел не использовать что-то вроде <rich:dataList /> и <rich:datascroller />, что потребует от меня получить все объекты в одном большом запросе и сохранить их в памяти ,Страницы для разбивки на страницы для шва?

Существуют ли общепринятые шаблоны для выполнения разбиения на страницы данных на стороне сервера? Я ищу стратегию:

  • Извлечение подмножества из моих данных, используя начальный индекс и подсчет
  • Прокрутка набора данных с помощью «следующая» и «предыдущая» кнопки, таким образом, получение нового подмножества данные, используя обновленный индекс начала и подсчитывать

Кто-нибудь из вас видел пользовательские DataModel объекты, которые позволили бы мне использовать <rich:dataList /> и <rich:datascroller />, но по-прежнему выполнять на стороне сервера с помощью разбиения на страницы подмножества запросов? Мне было бы очень интересно узнать о ваших методологиях для обработки такого сценария.

ответ

3

Существует встроенная разбивка на стороне сервера в Seam Application Framework. Просто взгляните на объекты EntityQuery.

Вы можете легко расширяет эти классы, и в основном получают пагинацию бесплатно при использовании getResultList()

Однако, прежде чем начать расширение этих классов во всем мире, посмотрите на this blog post.

+0

Согласен. Но у меня уже есть классы DAO для обработки данных. Мой вопрос в том, есть ли какие-либо хорошо зарекомендовавшие себя или общепринятые шаблоны для создания страниц на стороне сервера, которые не связаны с EntityQuery. – Shadowman

+0

Да, есть, и он реализован в объекте EntityQuery. Почему бы вам просто не взглянуть на исходный код того, как они это сделали, и реализовать то же самое? В основном, что вам нужно сделать, это передать параметр min и max, когда вы произнесите следующую страницу, и установите его в свой 'query.firstResult (min) .maxResult (max)' –

Смежные вопросы