У вас всегда будут проблемы с памятью, когда код Java перемещает / копирует набор данных весь хранилища данных (например, СУБД) в памяти Java, а затем выполняет сортировку и фильтрацию прямо в памяти Java с использованием кода Java , Будет еще хуже, если вы даже сохраните его в области сеанса веб-приложения.
Наиболее эффективный подход к памяти - позволить БД выполнить задачу, для которой она придумана. Язык SQL предлагает вам в каждом предложении ORDER BY
выполнить сортировку, предложении WHERE
выполнить фильтрацию и (* в зависимости от поставщика БД) LIMIT/OFFSET
предложения / подпункты / функции, чтобы возвращать только подмножество записей на основе firstrow и rowcount или lastrow . Таким образом, вы получите только набор данных в памяти Java, который фактически должен отображаться.
Нет стандартного компонента JSF, который делает именно это. Это всегда будет требовать, чтобы весь набор данных был доступен в памяти Java, потому что фильтрация и сортировка должны выполняться с использованием чистого кода Java или JavaScript. JSF ничего не знает о SQL, вам нужно предоставить пользовательскую реализацию javax.faces.model.DataModel
для данных и / или контролировать / управлять ею на уровне доступа к данным самостоятельно. Вы можете получить много новых идей / идей и найти пример в этой статье . Вы также можете найти примеры необходимых запросов SQL в этом JSP-ориентированном ответе , который я опубликовал ранее здесь.
Удачи.