java 简单实现商品查询分页功能

1、创建page类

@Repository
public class Page<T> {
    public static final Integer PAGE_SIZE = 4;
    private Integer pageNo;//当前页码
    private Integer pageTotal;//总页码
    private Integer showTotal = PAGE_SIZE;//当前页展示数量
    private Integer pageTotalCount;//总记录数
    private List<T> item;//当前页数据
    private String url;

    @Override
    public String toString() {
        return "Page{" +
                "pageNo=" + pageNo +
                ", pageTotal=" + pageTotal +
                ", showTotal=" + showTotal +
                ", pageTotalCount=" + pageTotalCount +
                ", item=" + item +
                ", url='" + url + '\'' +
                '}';
    }

    public static Integer getPageSize() {
        return PAGE_SIZE;
    }

    public Integer getPageNo() {
        return pageNo;
    }

    public void setPageNo(Integer pageNo) {
        if (pageNo < 1){
            pageNo = 1;
        }
        if (pageNo > pageTotal){
            pageNo = pageTotal;
        }
        this.pageNo = pageNo;
    }

    public Integer getPageTotal() {
        return pageTotal;
    }

    public void setPageTotal(Integer pageTotal) {
        this.pageTotal = pageTotal;
    }

    public Integer getShowTotal() {
        return showTotal;
    }

    public void setShowTotal(Integer showTotal) {
        this.showTotal = showTotal;
    }

    public Integer getPageTotalCount() {
        return pageTotalCount;
    }

    public void setPageTotalCount(Integer pageTotalCount) {
        this.pageTotalCount = pageTotalCount;
    }

    public List<T> getItem() {
        return item;
    }

    public void setItem(List<T> item) {
        this.item = item;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Page() {
    }

    public Page(Integer pageNo, Integer pageTotal, Integer showTotal, Integer pageTotalCount, List<T> item, String url) {
        this.pageNo = pageNo;
        this.pageTotal = pageTotal;
        this.showTotal = showTotal;
        this.pageTotalCount = pageTotalCount;
        this.item = item;
        this.url = url;
    }
}

2、dao层

public interface BookDao {

    //查询商品项
    List<Book> queryForPageItems(@Param(value = "begin") int begin, @Param(value = "pageSize") int pageSize);

    Integer queryForPageTotalCountByPrice(@Param(value = "min")int min,@Param(value = "max")int max);//价格区间查询
    
    List<Book> queryForPageItemsByPrice(@Param(value = "begin") int begin,@Param(value = "pageSize") int pageSize,
                                        @Param(value = "min")int min, @Param(value = "max")int max);
}

3、service层

@Service
public class BookServiceImpl implements BookService {

    @Autowired
    private BookDao bookDao;
 
    @Autowired
    private Page<Book> page;
    @Override
    public Page<Book> page(int pageNo, int pageSize) {
        page.setShowTotal(pageSize);// 设置每页显示的数量
        Integer pageTotalCount = bookDao.queryForPageTotalCount();// 求总记录数
        page.setPageTotalCount(pageTotalCount);// 设置总记录数
        Integer pageTotal = pageTotalCount / pageSize;// 求总页码
        if (pageTotalCount % pageSize > 0){
            pageTotal += 1;
        }
        page.setPageTotal(pageTotal);//设置总页码
        page.setPageNo(pageNo);//设置当前页码

        // 求当前页数据的开始索引
        Integer begin = (page.getPageNo() - 1) * pageSize;

        // 求当前页数据
        List<Book> items = bookDao.queryForPageItems(begin, pageSize);

        page.setItem(items);//设置当前页数据
        return page;
    }

  

4、controller层

@Controller
@RequestMapping("/book")
public class BookController {
    @Autowired
    private BookService bookService;

    @RequestMapping("/page.do")
    public String page(@RequestParam(defaultValue = "1") Integer pageNo,
                       @RequestParam(defaultValue = "4") Integer pageSize,
                       Model model){
        model.addAttribute("pageNo",pageNo);
        Page<Book> page = bookService.page(pageNo,pageSize);
        page.setUrl("book/page.do");
        model.addAttribute("page",page);
        return "forward:/pages/manager/book_manager.jsp";
    }
}

5、jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--	分页条的开始--%>
<div id="page_nav">
    <%--	首页大于一才显示	--%>
    <c:if test="${page.pageNo>1}">
        <a href="${page.url}?pageNo=1">首页</a>
        <a href="${page.url}?pageNo=${page.pageNo-1}">上一页</a>
    </c:if>
    <%--    页码输出开始--%>
    <c:choose>
        <%--    情况1:如果总页码小于等于5的情况,页码范围是:1 —— 总页码--%>
        <c:when test="${page.pageTotal <= 5}">
            <c:forEach begin="1" end="${page.pageTotal}" var="i">
                <c:if test="${i == page.pageNo}">
                    【${i}】
                </c:if>
                <c:if test="${i != page.pageNo}">
                    <a href="${page.url}?pageNo=${i}">${i}</a>
                </c:if>
            </c:forEach>
        </c:when>
        <%--                情况2:如果总页码大于5的情况。--%>
        <c:when test="${page.pageTotal > 5}">
            <c:choose>
                <%--                    小情况1:当前页码前面3个:1.2.3的情况,页码范围是:1-5 --%>
                <c:when test="${page.pageNo <= 3}">
                    <c:forEach begin="1" end="5" var="i">
                        <c:if test="${i == requestScope.page.pageNo}">
                            【${i}】
                        </c:if>
                        <c:if test="${i != page.pageNo}">
                            <a href="${page.url}&pageNo=${i}">${i}</a>
                        </c:if>
                    </c:forEach>
                </c:when>
                <%--                    小情况2:当前页码后面3个:7.8.9的情况,页码范围是:总页码-4 - 总页码 --%>
                <c:when test="${requestScope.page.pageNo >= requestScope.page.pageTotal-3}">
                    <c:forEach begin="${requestScope.page.pageTotal-4}" end="${requestScope.page.pageTotal}" var="i">
                        <c:if test="${i == requestScope.page.pageNo}">
                            【${i}】
                        </c:if>
                        <c:if test="${i != requestScope.page.pageNo}">
                            <a href="${page.url}?pageNo=${i}">${i}</a>
                        </c:if>
                    </c:forEach>
                </c:when>
                <%--                小情况3:3..4.5.6页码范围是:当前页码-2 - 当前页码加2--%>
                <c:otherwise>
                    <c:forEach begin="${requestScope.page.pageNo-2}" end="${requestScope.page.pageNo+2}" var="i">
                        <c:if test="${i == requestScope.page.pageNo}">
                            【${i}】
                        </c:if>
                        <c:if test="${i != requestScope.page.pageNo}">
                            <a href="${page.url}?pageNo=${i}">${i}</a>
                        </c:if>
                    </c:forEach>
                </c:otherwise>
            </c:choose>
        </c:when>
    </c:choose>

    <%--    页码输出结束--%>
    <%--    如果已经是最后一页,则不显示下一页,末页--%>
    <c:if test="${page.pageNo < page.pageTotal}">
        <a href="${page.url}?pageNo=${page.pageNo+1}">下一页</a>
        <a href="${page.url}?pageNo=${page.pageTotal}">末页</a>
    </c:if>
    共${page.pageTotal}页,${page.pageTotalCount}条记录
    到第<input value="${page.pageNo}" name="pn" id="pn_input"/>页
    <input id="searchPageBtn" type="button" value="确定">
    <script type="text/javascript">
        $(function () {
            //调到指定页码
            $("#searchPageBtn").click(function () {
                var pageNo = $("#pn_input").val();
                var pageTotal = ${requestScope.page.pageTotal};
                if (pageNo < 1 || pageNo > pageTotal){
                    alert("输入非法,请重新输入!");
                }else {
                    location.href = "${pageScope.basePath}${page.url}?pageNo=" + pageNo;
                }
                //JavaScript语言中提供了一个Location地址栏对象
                //它有一个属性叫href,它可以获取浏览器地址栏中的地址
                //href属性可读,可写
            });
        });
    </script>
</div>
<%--	分页条的结束--%>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值