商品信息进行分页展示(一看就会)

如果我们要进行分页展示的话页面上肯定要显示这些数据:商品信息,总页数,当前页当然了还有首页,尾页,上一页,下一页也可以出现在页面中,当然了我们还要在实体中写商品总个数,为了计算出一共有多少页,因此我们只需要将这些数据封装到实体PageBean中即可,在这里我使用MVC三层架构去进行调用,最终获得数据并进行封装,显示到页面上。

1:因此我们先编写实体PageBean(我就不生成get()和set()方法了)

package cn.itcast.domain;

import java.util.ArrayList;
import java.util.List;

public class PageBean<T> {
	//当前页
	private int currentPage;
	//当前页显示的商品个数
	private int currentCount;
	//总页数
	private int totalPage;
	//商品总个数
	private int totalCount;
	//每页显示的商品
	private List<T> bookList=new ArrayList<T>();
	
}

2:我们为了方便起见,先开始编写Controller层,我们清楚的时我们我去逐步的调用service层,然后调用dao层去查找数据,然而我们查找的条件应该是要查询第几页的数据,所以我们要传过去当前页码数,我们最开始可以将代码简单编写为,因为我们还不知道时第几页,可以先设置为第1页:


@WebServlet("/bookList")
public class BookListServlet extends HttpServlet {
	private static BookService bookService=new BookServiceImpl();
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		PageBean<Book> pageBean=new PageBean<Book>();
		    int countPage=1;
			int currentCount=10;
			pageBean=bookService.bookPageBean(countPage,currentCount);
			//System.out.println(pageBean);
			if(pageBean!=null){
				request.setAttribute("pageBean",pageBean);
				request.getRequestDispatcher("showBooks.jsp").forward(request, response);
			}else{
				System.out.println("查询失败");
			}
	}
}

3:调用service层方法编写service层(将我们刚才的在实体PageBean所写的内容全部封装上数据):



public class BookServiceImpl implements BookService {
	private BooksDao bookDao =new BooksDaoImpl();
	private MessageDao messageDao=new MessageDaoImpl();
	
	@Override
	public PageBean<Book> bookPageBean(int countPage,int currentCount) {
		// TODO Auto-generated method stub
		PageBean<Book> pageBean=new PageBean<Book>();
		//显示当前第几页
		pageBean.setCurrentPage(countPage);
		//显示一页的个数
		pageBean.setCurrentCount(currentCount);
		//总个数
		int totalCount=bookDao.queryBookCount();
		pageBean.setTotalCount(totalCount);
		//总页数
		int totalPage=(int)Math.ceil(1.0*totalCount/currentCount);
		pageBean.setTotalPage(totalPage);
		//商品信息
		List<Book> listBook=bookDao.queryBookPageBean(countPage, currentCount);
		pageBean.setBookList(listBook);
		return pageBean;
	}
}

在我们service中为一共有多少个数据时负值时,我们还不知道是多少,所以需要去查找数据库,调用dao层的方法,最后将查找到的数据返回即可



public class BooksDaoImpl extends DBUtils implements BooksDao {

	@Override
	public int queryBookCount() {
		String sql="select count(*) as count from tbl_book";
		int count=0;
		try {
			super.getConnection();
			ps=conn.prepareStatement(sql);
			rs=ps.executeQuery();
			while(rs.next()){
				
				count=rs.getInt(1);
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return count;
	}
	
}

我们在去给PageBean的List<Book>封装值得时候需要去从数据库中查找即可,比如我们第一页要查找10条数据,sql语句应该是:select *from tbl_book limit 0,10;  对于limit后面所写得数据可以这样理解:

第一页:limit 0,10          第二页:limit 10,10      第三页:limit    20,10       第四页:limit     30,10

所以limit的第一个参数可以总结的公式就是(当前页-1)*(每页显示的数量)

所以我们的方法代码可以写为(在这里我自己封装了一个查询方法,后面我会给出来):

public List<Book> queryBookPageBean(int currentPage,int currentCount) {
		// TODO Auto-generated method stub
		String sql="select *from tbl_book limit ?,?";
		int count=(currentPage-1)*currentCount;
		Object[] obj={count,currentCount};
		return super.executeQuery(sql, Book.class,obj);
	}

现在可以编写代码去进行测试,成功后就可以在回响到页面,我呢是这样写的

<div class="biaoqian">
			<div class="pagin-bar">
				<c:choose>
					<c:when test="${pageBean.currentPage==1 }">
						<span class="pagin-span">首页</span>
						<span class="pagin-span">上一页</span>
					</c:when>
					<c:otherwise>
						<span class="pagin-span"> <a class="pagin-span"
							href="bookList&currentPage=1">首页</a>
						</span>
						<span class="pagin-span"> <a class="pagin-span"
							href="bookList&currentPage=${pageBean.currentPage-1 }">上一页</a>
						</span>
					</c:otherwise>
				</c:choose>

				<c:choose>
					<c:when test="${pageBean.currentPage==pageBean.totalPage }">
						<span class="pagin-span">下一页</span>
						<span class="pagin-span">尾页</span>
					</c:when>
					<c:otherwise>
						<span class="pagin-span"> <a
							href="bookList&currentPage=${pageBean.currentPage+1 }">下一页</a>
						</span>
						<span class="pagin-span"> <a class="pagin-link"
							href="bookList&currentPage=${pageBean.totalPage}">尾页</a>
						</span>
					</c:otherwise>
				</c:choose>

				<span class="pagin-span"> 共${pageBean.totalPage }页/当前第${pageBean.currentPage }页
				</span> <span class="pagin-span"> <input type="text" size="1" /><input
					type="button" value="GO" />
				</span>
			</div>

代码大致是这样的,分页代码不难,只要能将PageBean编写出来,代码基本上就能完成一半了

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值