您的位置:首页 > Web前端 > JavaScript

servlet jsp 实现分页

2017-05-27 11:02 323 查看
    最近做的一个小的B/S项目中需要用到分页,我也是第一次接触,在查找很多资料后,最终成功实现。要实现分页,必须要确定使用的是哪个数据库,不同的数据库底层实现的分页查询的语句都不同,比如:mysql使用LIMIT,oracle使用ROWNUM。在这里我没写业务层,直接由servlet web层 调dao持久层,最终在表现出显示。

 1.DAO-持久层

public DisciplinePageBean<Discipline> getAll(int pageCode, int pageSize) {
Connection connection = null;
try {
connection = JDBCUtils.getConnection();
DisciplinePageBean<Discipline> pageBean = new DisciplinePageBean<Discipline>();
pageBean.setPageCode(pageCode);
pageBean.setPageSize(pageSize);

// 得到总记录数
String sql = "SELECT COUNT(*) FROM discipline";
Number number = (Number) queryRunner.query(connection, sql, new ScalarHandler());
int totalRecode = number.intValue();
pageBean.setTotalRecode(totalRecode);

sql = "SELECT dc_id,stu_no,stu_name,stu_sex,m_name,stu_class,stu_phone,dc_type,dc_reason,dc_date FROM discipline d,major m,student s "
+ "WHERE d.stu_id=s.stu_id AND m.m_id=s.m_id ORDER BY dc_id LIMIT ?,?";
List<Discipline> lists = queryRunner.query(connection, sql,
new BeanListHandler<Discipline>(Discipline.class), (pageCode - 1) * pageSize, pageSize);
pageBean.setBeanList(lists);

return pageBean;

} catch (SQLException e) {
e.printStackTrace();
throw new DBException("数据库连接错误!");
} finally {
if (connection != null) {
JDBCUtils.release(connection);
}
}
}


 2.  servlet-web层
public void findAll(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{

int pageCode = getPageCode(request);// 获取当前页面传递的页码
int pageSize = 4;// 设定每页的纪录数
DisciplinePageBean<Discipline> pageBean = disciplineDao.getAll(pageCode, pageSize);

request.setAttribute("pageBean", pageBean);
request.getRequestDispatcher("/StudyInfo/punishinfo.jsp").forward(request, response);
}


3.jsp-表现层
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<th style="text-align: left;" width="5%">处分编号</th>
<th style="text-align: left;" width="10%">学号</th>
<th style="text-align: left;" width="10%">姓名</th>
<th style="text-align: left;" width="5%">性别</th>
<th style="text-align: left;" width="10%">专业</th>
<th style="text-align: left;" width="8%">班级</th>
<th style="text-align: left;" width="12%">电话</th>
<th style="text-align: left;" width="7%">类型</th>
<th style="text-align: left;" width="12%">原因</th>
<th style="text-align: left;" width="10%">日期</th>

4000
<th style="text-align: left;" width="12%">操作</th>
</tr>
<!-- 如果数据库查询为空 -->
<c:if test="${empty pageBean.beanList}">
<tr style="height: 28px" class="tdbg" align="left">
<td colspan="13" align="left" style="color: Red; font-weight: bold;">未找到违纪信息!</td>
</tr>
</c:if>
<!-- 如果不为空 -->
<c:forEach items="${pageBean.beanList }" var="dis">
<tr>
<td>${dis.dc_id }</td>
<td>${dis.stu_no }</td>
<td>${dis.stu_name }</td>
<td>${dis.stu_sex }</td>
<td>${dis.m_name }</td>
<td>${dis.stu_class }</td>
<td>${dis.stu_phone }</td>
<td>${dis.dc_type }</td>
<td>${dis.dc_reason }</td>
<td>${dis.dc_date }</td>
<td>
<a href="javascript:del('${dis.dc_id }');">删除</a>
<a href="edit.do?id=${dis.dc_id }">修改</a>
</td>
</tr>
</c:forEach>

</table>
<br/>
<center>
<c:if test="${!empty pageBean.beanList}">
第${pageBean.pageCode}页/共${pageBean.totalPage}页
<a href="${pageBean.url }pageCode=1">首页</a>
<c:if test="${pageBean.pageCode >1 }">
<a href="showInfo.do?pageCode=${pageBean.pageCode-1 }">上一页</a>
</c:if>
<c:choose>
<%--当总页数不足10页时把所有都显示出来 --%>
<c:when test="${pageBean.pageCode<10 }">
<c:set var="begin" value="1" />
<c:set var="end" value="${pageBean.totalPage }" />
</c:when>
<%--当总页数大于10页时 --%>
<c:otherwise>
<c:set var="begin" value="${pageBean.pageCode-5 }" />
<c:set var="end" value="${pageBean.pageCode+4 }" />
<%--头溢出 --%>
<c:if test="${begin < 1 }">
<c:set var="begin" value="1" />
<c:set var="end" value="10" />
</c:if>
<%--尾溢出 --%>
<c:if test="${end > pageBean.totalPage }">
<c:set var="begin" value="${pageBean.totalPage-9 }" />
<c:set var="end" value="${pageBean.totalPage }" />
</c:if>
</c:otherwise>
</c:choose>
<c:forEach var="i" begin="${begin }" end="${end }">
<c:choose>
<c:when test="${i eq pageBean.pageCode }">${i }</c:when>
<c:otherwise>
<a href="${pageBean.url }pageCode=${i }">${i}</a>
</c:otherwise>
</c:choose>
</c:forEach>
<c:if test="${pageBean.pageCode < pageBean.totalPage }">
<a href="${pageBean.url }pageCode=${pageBean.pageCode+1 }">下一页</a>
</c:if>
<a href="${pageBean.url }pageCode=${pageBean.totalPage }">尾页</a>
</c:if>
</center>


4.实体类-PageBean

public class PageBean<T> {

// 当前页码
private int pageCode;
// 总页数
private int totalPage;
// 总记录数
private int totalRecode;
// 每页记录数
private int pageSize;
// 当前页的记录
private List<T> beanList;

private String url;

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public int getPageCode() {
return pageCode;
}

public void setPageCode(int pageCode) {
this.pageCode = pageCode;
}

// 计算总页数
public int getTotalPage() {
int totalPage = totalRecode / pageSize;
return totalRecode % pageSize == 0 ? totalPage : totalPage + 1;
}
public int getTotalRecode() {
return totalRecode;
}

public void setTotalRecode(int totalRecode) {
this.totalRecode = totalRecode;
}

public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

public List<T> getBeanList() {
return beanList;
}

public void setBeanList(List<T> beanList) {
this.beanList = beanList;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: