如何简单实现分页跳转功能
一.基本页面搭建准备
1.要实现分页跳转功能,推荐使用pageHelper,是开源的使用也方便,把jar包导入Web项目即可
2.首先写个超链接,跳转到查看功能,我这里新建了一个如:Product.html文件,跳转到QueryServlet页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>产品查看</title>
</head>
<body>
<a href="/queryServlet" >点击查看所有产品</a>
</body>
</html>
3.在QueryServlet中实现基本信息查询,并将信息共享到Sessio域中
@WebServlet("/queryServlet")
public class QueryServlet extends HttpServlet {
//定义基本的SqlSessionFactory 和 SqlSession 对象
private static SqlSessionFactory sqlSessionFactory = null ;
private static SqlSession sqlSession = null ;
// 首先使用静态代码块来读取配置文件和数据库信息,同时创建一个 sqlSessionFactory 工厂对象
// 之后要进行操作就从这个工厂中获取sqlSession,用完后close归还即可
static {
try {
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
4.我这里实现的ProductMapper实现的就是查询全部的方法 ,并且赋值首页page=1 ;
二.查看页面展示,因为要在页面获取数据,就用jsp文件展示
首先看下要实现的基本功能 ,资料是网上随便复制的,不要在意,每页展示10条
1.页面如下
<%--1.用表格展示数据--%>
<table border="1px">
<%--设置首行标题--%>
<thead>
<tr>
<th>编号</th>
<th>名称</th>
<th>价格</th>
<th>品牌</th>
<th>操作</th>
</tr>
</thead>
<%--用jstl语句循环获取共享域中的数据,展示在各个地方--%>
<c:forEach items="${list}" var="product">
<tr>
<td>${product.id}</td>
<td>${product.name}</td>
<td>${product.price}</td>
<td>${product.brand}</td>
<td>
<a href="/xiugaiServlet?id=${product.id}">修改</a>
<a href="/deleteServlet?id=${product.id}">删除</a>
</td>
</tr>
</c:forEach>
</table><br/><br/>
<%--实现上一个下一页翻页功能,在跳转路径后拼接标识内容 ,如caozuo=less 或add 表明上下页功能--%>
<c:if test="${page != 1}"><a href="/queryServlet?caozuo=less">上一页</a> </c:if>
<c:if test="${page != pages}"><a href="/queryServlet?caozuo=add">下一页</a> </c:if>
<%--获取共享域中的如 总页数,总条数,当前页信息--%>
总共${total}条,
${pages}页
当前第${page}页
<%--实现数字页面跳转--%>
<br/>
<c:forEach items="${counts}" var="count">
<c:if test="${count == page}">${count} </c:if>
<c:if test="${count != page}"><a href="/countServlet?cou=${count}">${count}</a> </c:if>
</c:forEach>
<br/><br>
2.里面需要共享的数据有
.product产品信息的list集合
当前页数page,总页数pages,信息总条数total,
数字跳转的集合counts,这些都需要在之前的QueryServlet里面去获取并共享
// 获取从ProductQuery.jsp传过来的值,如果是less,就将页数减一;如果是add就将页数加一
String result = req.getParameter("caozuo");
if("less".equals(result)){
page--;
}
if("add".equals(result)){
page++;
}
//通过 PageHelper工具,来获取展示page页数所需要的 List<Product> 集合
PageHelper.startPage(page,10);
List<Product> list = mapper.findAll();
//创建 PageInfo对象,传入list,获取如总页数,总资料数等信息
PageInfo<Product> pageInfo = new PageInfo<>(list);
long total = pageInfo.getTotal();
int pages = pageInfo.getPages();
//要实现比如1,2,3,4....10到最后一页的跳转信息,用pages.fori 循环获取页面集合
List<Integer> counts =new ArrayList<>();
for (int i = 1; i <=pages; i++) {
counts.add(i);
}
//将之前的信息都存到session共享域中
session.setAttribute("total",total);
session.setAttribute("pages", pages );
session.setAttribute("page",page);
session.setAttribute("list",list);
session.setAttribute("counts",counts);
//最后关闭sqlssion,将其返回SqlSessionFactory工厂中,并重定向到ProductQuery.jsp页面
sqlSession.close();
resp.sendRedirect("/ProductQuery.jsp");
三.补充
基本的页面跳转已经完成,最后的1,2,3.....counts为避免页面获取冲突,我新建了一个CountServlet,单独处理跳转
在CountServlet里面处理也很简单,获取cou参数数值,然后跳转到该数字页数的页面就行了
sqlSession = sqlSessionFactory.openSession(true);
ProductMapper mapper = sqlSession.getMapper(ProductMapper.class);
//获取传递过来的cou参数,转化为int数值
int cou = Integer.parseInt(req.getParameter("cou"));
//通过cou和 PageHelper工具来获取跳转页要展示的信息集合list
PageHelper.startPage(cou,10);
List<Product> list = mapper.findAll();
HttpSession session = req.getSession();
//把list集合以及跳转页面cou,list更新到session域中
session.setAttribute("list",list);
session.setAttribute("page",cou);
//最后归还sqlssion,并跳转展示页面
sqlSession.close();
resp.sendRedirect("/ProductQuery.jsp");
四,结语
当然最后CountServlet也可以整合到QueryServlet,多一个条件判断即可,希望我的思路对小伙伴们有所帮助!!!