教你在JSP中分页

SP中分页在实际开发中很常用,在这里教大家怎样在JSP中实现分页效果。分别用超链接、按钮和下拉列表框三种形式来实现。

只需掌握三点,在JSP中实现分页就可以轻松搞定。简而言之,就是"123原则",
即1条SQL语句;2个方法;3条数显示数据。

首先,SQL语句在分页中的作用很重要,它的查询原理就是"不在前@条的前@条数据",所以涉及到两个查询变量:第1个变量为一页显示的条数(pageSize),第2个变量为动态的、变化的页数(pageDynamic);假定当前页面为pageNo,那么它们之间存在这样的关系:pageDynamic = pageSize*(pageNo-1);
示例代码:

select top (?) * from Product where productid not in (select top (?) productid from product order by productid)

其次,在业务逻辑中编写两个方法;第一个方法是用于分页查询的,返回一个List<>泛型集合对象,第二个方法返回数据库中一共有多少条数据,返回整型数据;
示例代码:

public List<Product> getProduct(int pageNo,int pageSize)
{
//创建一个ArrayList泛型集合对象
List<Product> products = new ArrayList<Product>();
//创建一条SQL语句
String sql = "select top (?) * from Product where productid not in (select top (?) productid from product order by productid)";

try {
conn = getConn(); //得到数据库连接
pstmt = conn.prepareStatement(sql); //取得pstmt对象
pstmt.setInt(1, pageSize);
pstmt.setInt(2, pageSize*(pageNo-1)); //设置参数
rs = pstmt.executeQuery(); //执行查询,将结果集赋给rs

while (rs.next())
{
//创建一个Product对象
Product pro = new Product();
//为数据设置值
pro.setProductId(rs.getString("productId"));
pro.setProductName(rs.getString("productName"));
pro.setProductPrice(rs.getString("productPrice"));
pro.setProductDescription(rs.getString("productDescription"));
products.add(pro);
}

} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}

return products;
}



public int getAllPages(int pageSize) //pageSize为每页显示的条数
{

int result = 0; //返回值
try
{
conn = getConn(); //获得数据库连接
//查询出数据表中的全部数据条数,在此必须写"as a(a为变量)",否则rs无法接收整型值
String sql = "select count(*) as a from product";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();

if (rs.next())
{
result = rs.getInt("a");
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
this.closeAll(conn, pstmt, rs);
}
//如果总条数/每页显示条数能被整除,则返回该条数,如不能被整除,则返回总条数+1
return result%pageSize == 0?result/pageSize:result/pageSize+1;
}

之后,在JSP页面中编写doPages.jsp专门用于分页,并且将三条数据保存到session中,用于显示在页面中;
示例代码:doPages.jsp

<%@ page language="java" import="java.util.*,s2jsp.exercise.dao.*,s2jsp.exercise.entity.*" pageEncoding="UTF-8"%>
<%
int pageNo=1; //当前页(起始页)为1
//获得请求参数
String pagaNoString = request.getParameter("pageNo");
//请求参数不为空时,将参数赋给pageNo;
if (pagaNoString != null)
{
pageNo = Integer.parseInt(pagaNoString);
}
//创建ProductDao方法,用于调用分页查询方法
ProductDao pDao = new ProductDao();
List<Product> list = pDao.getProduct(pageNo,4); //当前页面显示的条数为4
int pages = pDao.getPages(4); //页数
//向session中保存3条数据
session.setAttribute("pageNo",pageNo);
session.setAttribute("list",list);
session.setAttribute("pages",pages);
response.sendRedirect("showAllProducts.jsp");

%>

之后,在显示页面调用doPages.jsp页面,显示出来之后,我们用3种方式进行分页操作:
1.超链接实现分页;
示例代码:
<a href="showAllProducts.jsp?pageNo=<%=pageNo==1?1:pageNo-1 %>">上一页</a>
<a href="showAllProducts.jsp?pageNo=<%=pageNo==pages?pages:pageNo+1 %>">下一页</a>

2.按钮实现;(按钮实现与下拉列表框的实现都得依赖于一个JavaScript方法)
JavaScript示例代码:

<script type="text/javascript">
function dopage(page)
{
location.href="showAllProducts.jsp?pageNo="+page;
}
</script>

示例代码:

<%if(pageNo==1){ %>
<input type="button" value="上一页" onClick="dopage(<%=pageNo==1?1:pageNo-1%>)" disabled="disabled"/>
<%}else{ %>
<input type="button" value="上一页" onClick="dopage(<%=pageNo==1?1:pageNo-1%>)"/>
<%} %>
<%if(pageNo==pages){ %>
<input type="button" value="下一页" onClick="dopage(<%=pageNo==pages?pages:pageNo+1%>)" disabled="disabled"/>
<%}else{ %>
<input type="button" value="下一页" onClick="dopage(<%=pageNo==pages?pages:pageNo+1%>)"/>
<%} %>

3.下拉列表框实现;
示例代码:

<select onChange="dopage(this.value)">
<%for(int i=1;i<=pages;i++){%>
<%if(pageNo==i) {%>
<option value="<%=i %>" selected="selected"><%=i %></option>
<%}else{ %>
<option value="<%=i %>"><%=i %></option>
<%}} %>
</select>

最后,JSP分页就完成了。记住:"123原则"。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值