用于中继器的 JSF2 寻呼/寻呼机 [英] JSF2 Paging / Pager for Repeater

查看:12
本文介绍了用于中继器的 JSF2 寻呼/寻呼机的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当您编写的每条代码都立即生效并且您的日程安排不足时,您是否知道这种感觉:-P 就像'哦,是的,现在我有时间让它变得完美'.这就是我现在的状态^^

因此,我使用 JSF (ui:repeat) 实现了一个转发器,并考虑对所有实体进行分页.有没有一种简单的方法可以做到这一点?我必须考虑哪些要点?

如果有人能给我一些帮助就好了.到目前为止,我的 googleskills 还没有帮助我:-P

干杯...

解决方案

这里有一个简单的例子,可以让你了解如何实现这一点.

重复分页器:

公共类RepeatPaginator {私有静态最终 int DEFAULT_RECORDS_NUMBER = 2;私有静态最终 int DEFAULT_PAGE_INDEX = 1;私有整数记录;私人整数记录总数;私人 int pageIndex;私有 int 页面;私人名单<?>原始模型;私人名单<?>模型;公共重复分页器(列表模型){this.origModel = 模型;this.records = DEFAULT_RECORDS_NUMBER;this.pageIndex = DEFAULT_PAGE_INDEX;this.recordsTotal = model.size();如果(记录> 0){页 = 记录 <= 0 ?1:记录总数/记录;如果(recordsTotal % 记录 > 0){页++;}如果(页面== 0){页数 = 1;}} 别的 {记录 = 1;页数 = 1;}更新模型();}公共无效更新模型(){int fromIndex = getFirst();int toIndex = getFirst() + 记录;if(toIndex > this.recordsTotal) {toIndex = this.recordsTotal;}this.model = origModel.subList(fromIndex, toIndex);}公共无效下一个(){if(this.pageIndex < pages) {this.pageIndex++;}更新模型();}公共无效前(){如果(this.pageIndex > 1){this.pageIndex--;}更新模型();}公共 int getRecords() {退货记录;}公共 int getRecordsTotal() {返回记录总数;}公共 int getPageIndex() {返回页面索引;}公共 int getPages() {返回页面;}公共 int getFirst() {返回 (pageIndex * 记录) - 记录;}公共列表<?>获取模型(){退货模式;}public void setPageIndex(int pageIndex) {this.pageIndex = pageIndex;}}

豆子:

公共类TestBean {私人列表<字符串>列表;私人 RepeatPaginator 分页器;@PostConstruct公共无效初始化(){this.list = new ArrayList();this.list.add("项目1");this.list.add("项目2");this.list.add("项目3");this.list.add("项目4");this.list.add("项目5");this.list.add("项目6");this.list.add("项目7");this.list.add("项目8");this.list.add("项目 9");this.list.add("第 10 项");this.list.add("项目 11");paginator = new RepeatPaginator(this.list);}公共RepeatPaginator getPaginator(){返回分页器;}}

XHTML:

<ui:define name="content"><h:形式><ui:repeat value="#{testBean.paginator.model}" var="listItem"><div><h:outputText value="#{listItem}"/>

</ui:repeat><h:commandButton value="&lt; prev" action="#{testBean.paginator.prev}"/><h:outputText value="#{testBean.paginator.pageIndex}/#{testBean.paginator.pages}"/><h:commandButton value="next &gt;"action="#{testBean.paginator.next}"/><h:inputHidden value="#{testBean.paginator.pageIndex}"/></h:form></ui:define></ui:composition>

Do you know this feeling when every code you write works immedietly and you underrun your schedule :-P It's like 'oh yeah now I have time to make it perfect'. That's where I am at the moment^^

So I implemented a repeater with JSF (ui:repeat) and I thought about a paging for all the entities. Is there maybe an easy way to do that? What are the points I have to think about?

Would be nice if someone gives me some help. My googleskills haven't helped me so far :-P

Cheers...

解决方案

Here is a simple example that should give you the idea on how to implement this.

RepeatPaginator:

public class RepeatPaginator {

    private static final int DEFAULT_RECORDS_NUMBER = 2;
    private static final int DEFAULT_PAGE_INDEX = 1;

    private int records;
    private int recordsTotal;
    private int pageIndex;
    private int pages;
    private List<?> origModel;
    private List<?> model;

    public RepeatPaginator(List<?> model) {
        this.origModel = model;
        this.records = DEFAULT_RECORDS_NUMBER;
        this.pageIndex = DEFAULT_PAGE_INDEX;        
        this.recordsTotal = model.size();

        if (records > 0) {
            pages = records <= 0 ? 1 : recordsTotal / records;

            if (recordsTotal % records > 0) {
                pages++;
            }

            if (pages == 0) {
                pages = 1;
            }
        } else {
            records = 1;
            pages = 1;
        }

        updateModel();
    }

    public void updateModel() {
        int fromIndex = getFirst();
        int toIndex = getFirst() + records;

        if(toIndex > this.recordsTotal) {
            toIndex = this.recordsTotal;
        }

        this.model = origModel.subList(fromIndex, toIndex);
    }

    public void next() {
        if(this.pageIndex < pages) {
            this.pageIndex++;
        }

        updateModel();
    }

    public void prev() {
        if(this.pageIndex > 1) {
            this.pageIndex--;
        }

        updateModel();
    }   

    public int getRecords() {
        return records;
    }

    public int getRecordsTotal() {
        return recordsTotal;
    }

    public int getPageIndex() {
        return pageIndex;
    }

    public int getPages() {
        return pages;
    }

    public int getFirst() {
        return (pageIndex * records) - records;
    }

    public List<?> getModel() {
        return model;
    }

    public void setPageIndex(int pageIndex) {
        this.pageIndex = pageIndex;
    }

}

Bean:

public class TestBean {

    private List<String> list;
    private RepeatPaginator paginator;

    @PostConstruct
    public void init() {
        this.list = new ArrayList<String>();
        this.list.add("Item 1");
        this.list.add("Item 2");
        this.list.add("Item 3");
        this.list.add("Item 4");
        this.list.add("Item 5");
        this.list.add("Item 6");
        this.list.add("Item 7");
        this.list.add("Item 8");
        this.list.add("Item 9");
        this.list.add("Item 10");
        this.list.add("Item 11");
        paginator = new RepeatPaginator(this.list);
    }

    public RepeatPaginator getPaginator() {
        return paginator;
    }

}

XHTML:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    template="/WEB-INF/template/default.xhtml">

<ui:define name="content">
    <h:form>
        <ui:repeat value="#{testBean.paginator.model}" var="listItem">
            <div>
                <h:outputText value="#{listItem}"/>
            </div>
        </ui:repeat>
        <h:commandButton value="&lt; prev" action="#{testBean.paginator.prev}"/>
        <h:outputText value="#{testBean.paginator.pageIndex} / #{testBean.paginator.pages}"/>
        <h:commandButton value="next &gt;" action="#{testBean.paginator.next}"/>
        <h:inputHidden value="#{testBean.paginator.pageIndex}"/>
    </h:form>
</ui:define>
</ui:composition>

这篇关于用于中继器的 JSF2 寻呼/寻呼机的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆