很多初学者在做jsp网页的时候都会遇到一个很蛋疼的问题,就是网页的分页。
遇到这种问题就像要去网上找第三方插件,但是找了半天还是没找到,或者找到了但是又不会用。
我也是这样,后来我就决定自己写一个分页的功能。经过几番努力,终于做了一个简单的分页。
这个方法只适用于数据较少的情况,如果数据很多,可能很慢,这样好像要用异步加载的方法吧。
最底部 有图有真相:
1、首先你要在数据库的操作类中写一个分页查询的方法根据不同的数据表,方法会有所不同。代码如下:
/*
* 分页查询
*/
public List<Work> pageQuery(int currentPage, int pageSize) {
String sql = "select * from work";
List<Work> list = new ArrayList<Work>();
int beginrow = pageSize * (currentPage - 1);// 开始的位置
int endrow = currentPage * pageSize;// 终止的位置
int currentNum = 0;// 经历的行数
try {
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
if (currentNum >= beginrow && currentNum < endrow) {
Work work = new Work();
work.setID(rs.getInt(1));
work.setWork_title(rs.getString(2));
work.setWork_content(rs.getString(3));
work.setStart_date(rs.getString(4));
work.setEnd_date(rs.getString(5));
list.add(work);
if (currentNum == endrow - 1) {
break;
}
}
currentNum++;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
2、在数据库操作类中写一个获取分页总数的方法。
/*
* 查询数据库获得中的页数
*/
public int getPageSize(int count){//获取总的页数
int total = 0;
String sql = "select count(*) from student";
try{
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if(rs.next()){
int records = rs.getInt(1);
if(records%count==0){
total = records / count;
}else{
total = records / count + 1;
}
}
}catch(Exception ex){
ex.printStackTrace();
}
return total;
}
3、写一个分页的逻辑类。
package com.web.page;
import java.sql.SQLException;
import java.util.List;
import com.web.dbDAO.WorkDAO;
import com.web.dbTable.Work;
public class PageInfo {
private int total;//总页数
private int curpage;//当前页
private int count;//每页显示记录数
private List<Work> list;//接受数据库操作的方法返回的数组
private WorkDAO workdao;//实例化数据库操作的类
public List<Work> getList(){
list = workdao.pageQuery(curpage,count);//开始进行分页
return list;
}
public PageInfo(int curpage){
this.curpage = curpage;
try {
workdao = new WorkDAO();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void setTotal(){
this.total = workdao.getPageSize(count);//得到总的页数
}
public int getTotal(){
return this.total;
}
public void setCurpage(int curpage){
this.curpage = curpage;
}
public int getCurpage(){
return this.curpage;
}
public void setCount(int count){
this.count = count;
}
public int getCount(){
return this.count;
}
}
4、jsp代码页面。
int currentPage = 1;//开始默认第一页
String c = request.getParameter("currentPage");//获取当前页
if (c != null && !c.equals("")) {
currentPage = Integer.parseInt(c);
}
PageInfo infos = new PageInfo(currentPage);
infos.setCurpage(currentPage);
infos.setCount(2);//每一页显示的页数
infos.setTotal();
List<Work> wlist = infos.getList();
<table class="homework_table" cellspacing="0" cellpadding="0">
<tr>
<th style="width:200px">作业标题</th>
<th>起始时间</th>
<th>截止时间</th>
<th>查看</th>
<th>提交</th>
</tr>
<%
for (Work work : wlist) {
%>
<tr>
<td><%=work.getWork_title()%></td>
<td><%=work.getStart_date()%></td>
<td><%=work.getEnd_date()%></td>
<td><a
href="WebPage/jsp/person2.jsp?content=<%=work.getWork_content()%>">查看</a>
</td>
<td class="file_submit">提交</td>
</tr>
<%
}
%>
<tr>
<td colspan="5" align="center"><a
href="WebPage/jsp/person.jsp?currentPage=1">首页</a>
<%
int counts = infos.getTotal();
for (int i = 0; i < counts; i++) {
%>
<a href="WebPage/jsp/person.jsp?currentPage=<%=i + 1%>"><%=i + 1%></a>
<%}%>
<%
int countes = infos.getTotal();
%>
<a href="WebPage/jsp/person.jsp?currentPage=<%=countes%>">尾页</a></td>
</tr>
</table>
以上代码经过测试,完美运行