在界面完成分页控制
在界面完成分页控制,也就是在循环显示的时候进行控制。前面介绍的显示信息的代
码是通过<c:forEach>控制的,所以需要在<c:forEach>中添加代码,只显示满足条件的记录。
<c:forEach>标签提供了两个属性 begin 和 end,可以控制集合中的记录从什么地方开始显示
以及显示到什么地方结束。
另外在分页控制的时候需要得到总的页数,而总的页数是由总的记录数决定的,所以
需要在 UserBean 中添加一个方法。
要在界面上完成分页控制,需要完成下面的修改:
(1) 修改 UserBean,添加一个获取总页数的方法;
(2) 修改 FindAllUserServlet,添加调用获取总页数的方法的代码以及传递总页数的
代码;
(3) 修改 userlist.jsp,添加页码控制的代码(上一页、下一页、最后一页和第一页等的控
制代码),以及控制信息显示的代码。
下面分别进行介绍。
8.2.1 修改 UserBean.java
在 UserBean 中添加一个方法,该方法用于获取记录数。得到数据库中记录数的过程与
查询所有用户信息的过程是相同的,只是 SQL 语句不同,最后得到的结果集不同。
SQL 语句是:
select count(*) from usertable
结果集只有一行一列,所以遍历和取值比较简单。只要将指针指向第一行,然后取出
第一列内容即可,代码如下:
rs.next();
int n = rs.getInt(1);
注意:虽然只有一条记录,但仍然需要使用 next 方法,因为得到结果集的时候指针指
向第一条记录的前面。
然后根据记录数计算页数,假设每页显示 10 条记录,则页数为:
pageCount = (n-1)/10+1;
获取总页数的方法如下:
public Integer getPageCount()
{
int pageCount=1;
// 连接对象
Connection con=null;
// 语句对象
Statement stmt=null;
// 结果集对象
ResultSet rs=null;
// 查询语句
String sql="select count(*) from usertable";
try
{
// 创建上下文环境
Context initContext = new InitialContext();
// 查找数据源
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/TestDB");
// 从连接池中获取连接
con = ds.getConnection();
// 创建语句对象
stmt=con.createStatement();
// 执行 select 语句,返回结果集对象
rs=stmt.executeQuery(sql);
// 指向结果集的第一条
rs.next();
// 得到第一列
int n = rs.getInt(1);
// 计算总页数
pageCount = (n-1)/10+1;
}catch(Exception e)
{
}
finally
{
// 关闭对象的顺序:rs stmt con
// 与创建对象的顺序相反
try{ rs.close(); }catch(Exception e){}
try{ stmt.close(); }catch(Exception e){}
try{ con.close(); }catch(Exception e){}
}
// 返回计算的结果
return new Integer(pageCount);
}