CRM-分页查询

CRM-分页查询

PageResult对象的设计

对象主要包括当前页号,总页数,数据列表,总记录数,每页大小。

    public class PageResult {

        //总记录数
        private long totalCount;
        //当前页号
        private int pageNo;
        //总页数
        private int totalPageCount;
        //页大小
        private int pageSize;
        //列表记录
        private List items;

        //计算总页数
        public PageResult(long totalCount, int pageNo, int pageSize, List items) {
            this.items = items==null?new ArrayList():items;
            this.totalCount = totalCount;
            this.pageSize = pageSize;
            if(totalCount != 0){
                //计算总页数
                int tem = (int)totalCount/pageSize;
                this.totalPageCount = (totalCount%pageSize==0)?tem:(tem+1);
                this.pageNo = pageNo;
            } else {
                this.pageNo = 0;
            }
        }

        public long getTotalCount() {
            return totalCount;
        }
        public void setTotalCount(long totalCount) {
            this.totalCount = totalCount;
        }
        public int getPageNo() {
            return pageNo;
        }
        public void setPageNo(int pageNo) {
            this.pageNo = pageNo;
        }
        public int getTotalPageCount() {
            return totalPageCount;
        }
        public void setTotalPageCount(int totalPageCount) {
            this.totalPageCount = totalPageCount;
        }
        public int getPageSize() {
            return pageSize;
        }
        public void setPageSize(int pageSize) {
            this.pageSize = pageSize;
        }
        public List getItems() {
            return items;
        }
        public void setItems(List items) {
            this.items = items;
        }

    }

BaseDao中分页查询方法的实现

NT:这里使用了QueryHelper,详情见其他博文。

public PageResult getPageResult(QueryHelper queryHelper, int pageNo, int pageSize) {
        Query query = getSession().createQuery(queryHelper.getQueryListHql());
        List<Object> parameters = queryHelper.getParameters();
        if(parameters != null){
            for(int i = 0; i < parameters.size(); i++){
                query.setParameter(i, parameters.get(i));
            }
        }

        if(pageNo < 1) pageNo = 1;  //异常叶号进行处理

        query.setFirstResult((pageNo-1)*pageSize);//设置数据起始索引号
        query.setMaxResults(pageSize);
        List items = query.list();
        //获取总记录数
        Query queryCount = getSession().createQuery(queryHelper.getQueryCountHql());
        if(parameters != null){
            for(int i = 0; i < parameters.size(); i++){
                queryCount.setParameter(i, parameters.get(i));
            }
        }
        long totalCount = (Long)queryCount.uniqueResult();

        return new PageResult(totalCount, pageNo, pageSize, items);
    }
}

Action中对于请求数据的处理

由于对action进行了抽取,在baseaction中,定义了如下3个实例变量

    protected PageResult pageResult;
    private int pageNo;
    private int pageSize = DEFAULT_PAGE_SIZE;
    public static int DEFAULT_PAGE_SIZE = 3;   //pageSize应设置默认值
public String listUI() throws Exception{
        //加载分类集合
        ActionContext.getContext().getContextMap().put("infoTypeMap", Info.INFO_TYPE_MAP);
        QueryHelper queryHelper = new QueryHelper(Info.class, "i");

        /*普通分页查询、有条件的分页查询*/ 
        pageResult = infoService.getPageResult(queryHelper, getPageNo(), getPageSize());
        } catch (Exception e) {
            throw new Exception(e.getMessage());
        }

        return "listUI";
    }

在listUI中,对查询进行了集中,即普通分页查询、有条件的分页查询等走的都是这个action。

前台JSP页面,分页的抽取

前台页面并没有设计pageBar, 其实后台页面也没提供支持。
这里将前台分页抽取到了pageNavigator.jsp。
其他页面需要分页时只需

<s:if test="pageResult.totalCount > 0">
        <table width="100%" class="pageDown" border="0" cellspacing="0"
            cellpadding="0">
            <tr>
                <td align="right">
                    总共 <s:property value="pageResult.totalCount"/> 条记录,当前第 <s:property value="pageResult.pageNo"/> 页,
                    共 <s:property value="pageResult.totalPageCount"/><s:if test="pageResult.pageNo > 1">
                            &nbsp;&nbsp;<a href="javascript:doGoPage(<s:property value='pageResult.pageNo-1'/>)">上一页</a>
                    </s:if>
                    <s:if test="pageResult.pageNo < pageResult.totalPageCount">
                            &nbsp;&nbsp;<a href="javascript:doGoPage(<s:property value='pageResult.pageNo+1'/>)">下一页</a>
                    </s:if>        
                    到&nbsp;<input id="pageNo" name="pageNo" type="text" style="width: 30px;" onkeypress="if(event.keyCode == 13){doGoPage(this.value);}" min="1"
                    max="" value="<s:property value='pageResult.pageNo'/>" /> &nbsp;&nbsp;
                </td>
            </tr>
        </table>
    </s:if><s:else>暂无数据!</s:else>   

    <script type="text/javascript">
        //翻页
        function doGoPage(pageNo){
            document.getElementById("pageNo").value = pageNo;
            document.forms[0].action=list_url;    //提交url定义成全局,以便进行抽取
            document.forms[0].submit();
        }
    </script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值