hibernate 无法使tomahawk dataScroller与休眠页面一起工作

pinkon5k  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(91)

我有一个jsf页面,它有一个dataTable页脚。实际的数据库表很大,当我得到所有的行时,表就可以工作了。但是由于大小的原因,它非常慢。后端使用java和hib,我可以在那里分页。是否有一种方法可以告诉dataScroller结果集的大小,但只在用户单击其中一个导航按钮时加载该特定页面的记录?代码不是特别相关,但我会张贴它,如果它有帮助。

huwehgph

huwehgph1#

这是我的解决方案,以防有人需要。
1.我需要告诉bean哪个页面需要加载,所以我将这个添加到了我的t:dataScroller

actionListener="#{mrBean.scrollEvent}"

1.在我的bean中,我像这样实现了它的方法

private int page = 1;
...
public void scrollEvent(ActionEvent event) {
    if (event instanceof ScrollerActionEvent) {
        ScrollerActionEvent sae = (ScrollerActionEvent)event;
        int index = sae.getPageIndex();
        if (index > 0) {
            page = index;
        } else if (sae.getScrollerfacet().equals("next")) {
            page = page == getMaxPage() ? page : page + 1;
        } else if (sae.getScrollerfacet().equals("fastf")) {
            page = page + 5 > getMaxPage() ? getMaxPage() : page + 5;
        } else if (sae.getScrollerfacet().equals("last")) {
            page = getMaxPage();
        } else if (sae.getScrollerfacet().equals("previous")) {
            page = page > 1 ? page - 1 : 1;
        } else if (sae.getScrollerfacet().equals("fastr")) {
            page = page > 5 ? page - 5 : 1;
        } else if (sae.getScrollerfacet().equals("first")) {
            page = 1;
        }
    }
}

private int getMaxPage() {
    return (int) Math.ceil(getCount() / (tableRows + 0.0));
}

public long getCount() {
    //implement a dao method to get the count for the resultset
}

1.基于documentation from Baeldung从hib中获取页面,然后在页面前后用伪对象填充item数组(datascroller只能处理所有项目)。这些伪对象无关紧要,因为它们对用户不可见。只有用户看到的页面才包含来自数据库的真实的对象。为了使其更有效地利用内存,可以用相同的对象填充数组(重用相同的指针)。

相关问题