目录
分页功能
实现思维:
主界面分页区域代码
dao类分页代码
分页功能
——带有模糊查询的分页功能
实现思维:
实例化dao类,可以调用拿到带有模糊查询的方法,和查询总数的方法。
定义第一页和每页显示的条数。
拿到查询总数,可以得到总页数。
调用带有模糊查询的方法 参数(第几页,每页数,模糊查询关键词)——拿到查询的内容进行一个排列。
在尾部有关当前页数的代码,相关超链接需要带有部分逻辑代码和参数
当前页数(第一页,总页数)
首页(第一页,模糊查询关键词)
上一页(当前页数-1并且判断是否符合逻辑,模糊查询关键词)
下一页(当前页数+1并且判断是否符合逻辑,模糊查询关键词)
末页(最后一页,模糊查询关键词)
当点击时跳转到主页面,需要接收参数,进行一个逻辑判断。
主界面分页区域代码
<!-- 需求:完成后台主页面的新闻显示绑定 start -->
<ul class="classlist">
<%
//request请求对象设置编码
request.setCharacterEncoding("utf-8");
//实例化DAO
INewsDao ind = new NewsDaoImpl();
//pageIndex 页码 默认第一页
int pageIndex = 1;
//pageSize 每页显示的条数 5条
int pageSize = 5;
//当手动点击了下一页按钮 获取pageIndex 赋值给第75处的那个pageINdex
String pIndex = request.getParameter("pageIndex");
if(null!=pIndex){//说明点击了下一页
pageIndex = Integer.valueOf(pIndex);
}
//手动点击了搜索提交按钮 获取到模糊查询的关键字 否则没有点击的情况下 null 转换
String strName = request.getParameter("strName");
if(strName==null){//没有手动点击搜索
strName="";
}else{//手动点击了搜索
//编码和解码
//strName = new String(strName.getBytes("ISO-8859-1"),"utf-8");
}
System.out.println("strName = "+strName);
//不考虑不糊查询
int count = ind.getNewsCount(strName);//6
int pageMax = 0;
if(count % pageSize == 0){
pageMax = count / pageSize;
}else{
pageMax = count / pageSize +1;
}
System.out.println("count: "+count);
System.out.println("pageMax: "+pageMax);
//调用查看所有的新闻的方法
List<News> listNews = ind.queryNewsAll5(pageIndex,pageSize,strName);//第一个参数页码 第二个参数:条数
for(News news:listNews){
%>
<!-- 填充新闻标题以及时间或者作者 -->
<li>
<!-- 新闻标题 -->
<a href='#'><%=news.getNtitle() %></a>
<span>
作者:<%=news.getNauthor() %>
<a href='#'>修改</a>
<a href='javascript:void(0)' onclick='clickdel()'>删除</a>
</span> </li>
<%
}
%>
<li class='space'></li>
<p align="right" style = "font-size:20px;font-weight: bold">
当前页数:[<%=pageIndex %>/<%=pageMax %>]
<a href="admin.jsp?pageIndex=1&strName=<%=null!=strName?strName:""%>">首页</a>
<a href="admin.jsp?pageIndex=<%=pageIndex-1<0?1:pageIndex-1%>&strName=<%=null!=strName?strName:""%>">上一页</a>
<a href="admin.jsp?pageIndex=<%=pageIndex+1>pageMax?pageMax:pageIndex+1%>&strName=<%=null!=strName?strName:""%>">下一页</a>
<a href="admin.jsp?pageIndex=<%=pageMax%>&strName=<%=null!=strName?strName:""%>">末页</a>
</p>
</ul>
<!-- 需求:完成后台主页面的新闻显示绑定 end -->
dao类分页代码
带有模糊查询方法:
@Override
public List<News> queryNewsAll5(int pageIndex,int pageSize,String strName) {
//1 5 第一页 5条数据 start = 1 end = 5;
//2 5 第二页 5条数据 start = 6 end = 10
//根据参数pageIndex和pageSize来计算区间查询的规律
int start = (pageIndex-1)*pageSize +1;
int end = pageIndex * pageSize;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
List<News> list = new ArrayList<News>();
try {
conn = DBHelper.getConn();
String sql = "select b.* from (\r\n" +
" select a.*,rownum as rid from (\r\n" +
" select * from tb_news where ntitle like '%"+strName+"%'\r\n" +
" )a\r\n" +
")b where b.rid between "+start+" and "+end+"";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()) {
//获取分类编号rs.getInt("ntid");
Theme theme = new ThemeDaoImpl().getThemeByTid(rs.getInt("ntid"));
list.add(new News(rs.getInt("nid"), theme, rs.getString("ntitle"), rs.getString("nauthor"),
rs.getString("nsummary"), rs.getString("ncontent"),
rs.getString("nimage"), rs.getString("ndate"), rs.getInt("ncount")));
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(conn, ps, rs);
}
return list;
}
统计总数:
@Override
public int getNewsCount(String strName) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
int count = 0;//保存表的总记录数
try {
conn = DBHelper.getConn();
String sql = "select count(*) from tb_news where ntitle like '%"+strName+"%'";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
if(rs.next()) {
count = rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(conn, ps, rs);
}
return count;
}