<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql_rt" %>
<%@taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt"%>
<html>
<head>
<title>使用SQL标签</title>
</head>
<body bgcolor="white">
<c:set var="noOfRows" value="10" />
<sql:setDataSource driver =
"sun.jdbc.odbc.JdbcOdbcDriver" url =
"jdbc:odbc:accp" user="sa" password="" var="conn"/>
<c:if test="${custList == null}">
<sql:query var="custList" scope="session"
sql="SELECT * FROM employee ORDER BY LName"
dataSource="${conn}"/>
</c:if>
<c:choose>
<c:when test="${custList.rowCount == 0}">
此处不再有其他客户...
</c:when>
<c:otherwise>
<b>以下是客户列表:</b>
<p>
<table border="1">
<th>姓氏</th>
<th>名字</th>
<th>年龄</th>
<c:forEach items="${custList.rows}" var="row"
begin="${param.start}" end="${param.start +
noOfRows - 1}">
<tr>
<td><c:out value="${row.LName}" /></td>
<td><c:out value="${row.FName}" /></td>
<td><c:out value="${row.job_id}" /></td>
</tr>
</c:forEach>
</table>
</c:otherwise>
</c:choose>
<p>
<c:choose>
<c:when test="${param.start > 0}">
<a href="foreachexample.jsp?start=<c:out
value="${param.start - noOfRows}" />">
上一页</a>
</c:when>
<c:otherwise>
上一页
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${param.start + noOfRows <
custList.rowCount}">
<a href="foreachexample.jsp?start=<c:out
value="${param.start + noOfRows}" />">
下一页</a>
</c:when>
<c:otherwise>
下一页
</c:otherwise>
</c:choose>
共${custList.rowCount}条记录
共 <fmt:formatNumber type="number" value="${custList.rowCount%noOfRows==0?custList.rowCount/noOfRows:(custList.rowCount%noOfRows>4?(custList.rowCount/noOfRows):(custList.rowCount/noOfRows+1))}" maxFractionDigits="0"/> 页
第 <fmt:formatNumber type="number" value="${(param.start%noOfRows==0?param.start/noOfRows:(param.start%noOfRows>4?(param.start/noOfRows):(param.start/noOfRows+1)))+1}" maxFractionDigits="0"/> 页
</body>
</html>
说明:这里使用到了标准标签库中SQL标签去查询数据记录。
使用条件标签判断分页中上下页的是否链接。使用EL表达式显示总记录数,<c:set var="noOfRows" value="10" />用来设置每页的显示记录数。通过总记录数和每页记录数来计算总页数。
因为EL表达式中‘/’结果是实际的浮点数,而不是整除,也没有函数来完成取整,这里就结合格式化标签<fmt:formatNumber type="number" value="${custList.rowCount%noOfRows==0?custList.rowCount/noOfRows:(custList.rowCount%noOfRows>4?(custList.rowCount/noOfRows):(custList.rowCount/noOfRows+1))}" maxFractionDigits="0"/>来完成格式化取整,maxFractionDigits="0"表示保留0位小数,即取整,但是这的取整也只是四舍五入,所以又给计算页数带来困难,
最后我通过${custList.rowCount%noOfRows==0?custList.rowCount/noOfRows:(custList.rowCount%noOfRows>4?(custList.rowCount/noOfRows):(custList.rowCount/noOfRows+1))}两个条件表达式嵌套完成页数计算
用同样的方法实现计算第几页的目的