JSF h: datatable - как реализовать разбиение на страницы через набор результатов? - PullRequest
0 голосов
/ 12 декабря 2018

Мой вопрос касается наилучшей практики, как реализовать разбиение на страницы для набора результатов (например, результата SQL) в приложении JSF?

Результирующие наборы данных обычно реализуются компонентом @RequestScoped, как в следующем коротком примере:

@Named
@RequestScoped
public class DataBean {

    private List<Item> items;

    @EJB
    private ItemService itemService;

    @PostConstruct
    public void init() {
        items = itemService.list();
    }

    public List<Item> getItems() {
        return items;
    }
}

Таким образом, набор результатов вычисляется только один раз для жизненного цикла компонента.Смотрите также это обсуждение: Как и когда я должен загрузить модель из базы данных для h: dataTable

Теперь, как выполнить разбиение на страницы, если вы хотите показать только подмножество данных - например,10 записей за раз.Для этого вам нужен - для моего понимания - объект ViewScoped или ConversationScoped, содержащий текущий индекс страницы, выбранный пользователем.

@Named
@ConversationScoped
public class PageController implements Serializable {

    private int pageIndex = 0;

    @PostConstruct
    protected void init() {
        if (conversation.isTransient()) {
            conversation.begin();
        }
    }

    public void next() {
        pageIndex++;
    }

    public void back() {
        pageIndex--;
        if (pageIndex < 0) {
            pageIndex = 0;
        }
    }

    public int getPageIndex() {
        return pageIndex;
    }
}

Мой вопрос: как я могу предоставить моему DataBean информацию pageIndex из моего PageController.Или, если быть более точным, какова лучшая практика?Я хочу избежать реализации DataBean ViewScoped, потому что я не хочу сохранять результаты данных в сеансе сервера.

Мое единственное решение до сих пор состоит в том, чтобы загрузить данные в viewAction и предоставить pageController параметр метода:

<f:metadata>
    <f:viewAction action="#{dataBean.loadData(pageController)}" />
</f:metadata>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...