1 设置跳转
<logic:equal name="page" property="hasPreviousPage" value="true">
<a href="list.do?currentPage=<bean:write name="page" property="previousPage"/>">上一页</a>
</logic:equal>
<logic:equal name="page" property="hasNextPage" value="true">
<a href="list.do?currentPage=<bean:write name="page" property="nextPage"/>">下一页</a>
</logic:equal>
2 在Form中设置private String currentPage ;
3进入action,在action中,页面信息都是在pagebean得到的,根据页面信息,进行分页操作
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
ListForm listForm = (ListForm) form;// TODO Auto-generated method stub
HttpSession session = request.getSession();
PageBean pb ;
NewsDao newsdao = new NewsDao();
List list = new ArrayList();
String currentPage = listForm.getCurrentPage();
if(currentPage == null){
int totalRows = newsdao.getTotalRows();
System.out.println(totalRows);
pb = new PageBean(totalRows,1);
session.removeAttribute("page");
System.out.println("当前页面"+String.valueOf(pb.getPageStartRow()));
list = newsdao.getPageQueryDate(String.valueOf(pb.getPageStartRow()),String.valueOf(pb.getPageRecorders()));
System.out.println("进入action11");
}
else{
int totalRows = newsdao.getTotalRows();
pb = new PageBean(totalRows,Integer.parseInt(currentPage));
System.out.println("当前页面"+String.valueOf(pb.getPageStartRow()));
list = newsdao.getPageQueryDate(String.valueOf(pb.getPageStartRow()), String.valueOf(pb.getPageRecorders()));
session.setAttribute("page",pb);
request.setAttribute("all", list);
return mapping.findForward("pageinfo");
}
}
在action中,会涉及到三个方法
(1)
查询到数据库中记录的跳数
public int getTotalRows() {
int totalRows = 0;
String sql = "select count(*) from Newsvo";
Connection conn = this.session.connection();
PreparedStatement pstmt;
try {
pstmt = conn.prepareStatement(sql);
ResultSet rs =pstmt.executeQuery();
if(rs.next()){
String id = (String) rs.getString(1);
totalRows = Integer.parseInt(id);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return totalRows;
}
}
(2)
根据记录的条数,得到分页信息
public class PageBean {
private int currentPage = 1; // 当前页
private int totalPages = 0; // 总页数
private int pageRecorders = 5;// 每页5条数据
private int totalRows = 0; // 总数据数
private int pageStartRow = 0;// 每页的起始数
private int pageEndRow = 0; // 每页显示数据的终止数
private boolean hasNextPage = false; // 是否有下一页
private boolean hasPreviousPage = false; // 是否有前一页
private int nextPage = 0;//下一页的页码
private int previousPage = 0;//上一页的页码
public PageBean(int totalRows,int currentPage) {
this.totalRows = totalRows;
this.currentPage = currentPage;
if(currentPage < 2)
hasPreviousPage = false;
else
hasPreviousPage = true;
if ((totalRows % pageRecorders) == 0) {
totalPages = totalRows / pageRecorders;
} else {
totalPages = totalRows / pageRecorders + 1;
}
if (currentPage < totalPages) {
hasNextPage = true;
nextPage = currentPage + 1;
pageStartRow = (currentPage - 1)*pageRecorders;
this.pageEndRow = pageStartRow + pageRecorders;
} else if(currentPage == totalPages){
pageStartRow = (currentPage - 1)*pageRecorders;
this.pageEndRow = totalRows;
hasNextPage = false;
nextPage = currentPage;
}
if(currentPage < 2){
previousPage = currentPage;
hasPreviousPage = false;
}else if(currentPage > 1){
previousPage = currentPage-1;
hasPreviousPage = true;
}
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public boolean isHasNextPage() {
return hasNextPage;
}
public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
}
public boolean isHasPreviousPage() {
return hasPreviousPage;
}
public void setHasPreviousPage(boolean hasPreviousPage) {
this.hasPreviousPage = hasPreviousPage;
}
public int getNextPage() {
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public int getPageEndRow() {
return pageEndRow;
}
public void setPageEndRow(int pageEndRow) {
this.pageEndRow = pageEndRow;
}
public int getPageRecorders() {
return pageRecorders;
}
public void setPageRecorders(int pageRecorders) {
this.pageRecorders = pageRecorders;
}
public int getPageStartRow() {
return pageStartRow;
}
public void setPageStartRow(int pageStartRow) {
this.pageStartRow = pageStartRow;
}
public int getPreviousPage() {
return previousPage;
}
public void setPreviousPage(int previousPage) {
this.previousPage = previousPage;
}
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public int getTotalRows() {
return totalRows;
}
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
}
(3)根据分页信息,把数据查询出来
public List<Newsvo> getPageQueryDate(String startRow,String num){
List list = new ArrayList();
System.out.println("进入查询");
String sql="select * from Newsvo limit "+startRow+","+num;
Connection conn = this.session.connection();
PreparedStatement pstmt ;
try {
pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
Newsvo news = new Newsvo();
news.setId(rs.getInt("id"));
news.setUrl(rs.getString("url"));
//news.setUrl(newsvo.getUrl());
news.setTitle(rs.getString("title"));
System.out.println(rs.getString("title"));
list.add(news);
} } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
错误:dao中,
while(rs.next()){
Newsvo news = new Newsvo();
news.setId(rs.getInt("id"));
news.setUrl(rs.getString("url"));
//news.setUrl(newsvo.getUrl());
news.setTitle(rs.getString("title"));
System.out.println(rs.getString("title"));
list.add(news); }
我把vo的定义,放在while以外,发生了查询的是同一条数据。
分享到:
相关推荐
默认行为是使用无限滚动,但是如果禁用了JS或发生错误,则会回退到分页。 此外,该演示还具有切换功能,因此您可以在不禁用浏览器中的JS的情况下测试两种模式。 此实现不会在初始pageload时获取不必要的元数据。 ...
04-25修复bug*修复前端页面缓存在列表分页时只能缓存一页*修复启用url路由简化地址的时候分页还是原理的地址*优化安装程序,去掉安装锁定文件,用数据库配置文件代替锁定文件*优化内容模型*修复约束权限的一个错误*...
*修复启用url路由简化地址的时候分页还是原理的地址 *优化安装程序,去掉安装锁定文件,用数据库配置文件代替锁定文件 *优化内容模型 *修复约束权限的一个错误 *修复跳转url无法保存数据 *修复面包屑导航链接...
甚至发生响应超时的错误 为了解决这种大数据量请求的问题,就不得不使用分页模式了 在这方面,JDBC就强悍得多,它可以将指定的行数和SQL请求一并发送给SQL Server,这样只返回分页后的数据,JDBC的原理还不清楚,但...
(14)Cache原理基础:程序访问的局部性原理 ①命中率:h ②平均访问时间: ta=htc+(1-h)tm ③主存与Cache的速差倍数:r=tm/tc (=5~10) ④访问效率:e = Cache访问时间/平均访问时间= 1/(r+(1-r)h) ⑤影响命中率h...
|||||其他 简介 ...特性 支持MySQL,MariaDB,Oracle,DB2,PostgreSQL,SQLServer等多支持jdbc规范的数据库 支持非关系型数据库Redis,Mongodb ...支持脚本代码自动提示,错误提示,参数提示,语法错误提示
3.5.2 复杂查询的分页 3.5.3 获取前端表格插件传值 3.6 数据范围 3.6.1 介绍 3.6.2 如何使用 3.6.3 原理 3.7 guns-rest模块的使用 3.7.1 关于jwt鉴权 3.7.2 关于传输数据的签名 3.7.3 guns-rest模块的运行流程 3.7.4...
干净的redux-demo Kotlin中的示例Android应用程序使用展示了结合和原理的。结构该应用程序包含两个屏幕: 登录屏幕:此功能是模拟的。... 还包含:分页,重新加载功能和错误处理。 当前没有可用的RX实现。执照根据。
分页原理 limit 开始位置 , 条数 (当前页数 – 1) x 每页条数 , 每页条数 limit ($Page – 1) * $PageSize , $PageSize 0 为开始位置 mysql_num_rows 条数 require() 与 require_once() 开始加载,错误停止 ...
CH1 操作系统概论............................................................................................................................1 1.1 操作系统概观.............................................
13:PHP+MYSQL分页原理 14:PHP上传原理及应用 15:PHP生成HTML文件原理 16:PHP小偷程序原理和实例 17:PHP面向对象开发的学习(一) 18:PHP面向对象开发的学习(二) 19:PHP面向对象开发的学习(三) 20:PHP...
分页硬件在通过页表转换地址时会注意到无效位被设置,从而陷入操作系统,这种陷阱是因为操作系统未能将所需要的页面调入内存引起的。 处理缺页错误: 1、检查这个进程的内部表,确定该引用是否为有效的内存访问...
6.4.4 进程的堆使用、内存占用、虚拟内存大小,页面错误情况 184 6.5 动态链接库 185 6.5.1 加载、释放DLL、通过句柄获取DLL相关信息 186 6.5.2 编写动态链接库、导出函数 186 6.5.3 创建动态链接库工程,...
处理错误方式②-错误处理器 错误级别 处理错误方式③-错误触发器 9-10 4.php错误日志 9-10 5.php异常处理 9-10 6.php进阶预热篇-php执行流程时序图 9-10 7.http协议深度剖析①-http请求详解 防盗链技术 9-13 0.回顾 ...
处理错误方式②-错误处理器 错误级别 处理错误方式③-错误触发器 9-10 4.php错误日志 9-10 5.php异常处理 9-10 6.php进阶预热篇-php执行流程时序图 9-10 7.http协议深度剖析①-http请求详解 防盗链技术 9-13 0.回顾 ...
处理错误方式②-错误处理器 错误级别 处理错误方式③-错误触发器 9-10 4.php错误日志 9-10 5.php异常处理 9-10 6.php进阶预热篇-php执行流程时序图 9-10 7.http协议深度剖析①-http请求详解 防盗链技术 9-13 0.回顾 ...
处理错误方式②-错误处理器 错误级别 处理错误方式③-错误触发器 9-10 4.php错误日志 9-10 5.php异常处理 9-10 6.php进阶预热篇-php执行流程时序图 9-10 7.http协议深度剖析①-http请求详解 防盗链技术 9-13 0.回顾 ...
处理错误方式②-错误处理器 错误级别 处理错误方式③-错误触发器 9-10 4.php错误日志 9-10 5.php异常处理 9-10 6.php进阶预热篇-php执行流程时序图 9-10 7.http协议深度剖析①-http请求详解 防盗链技术 9-13 0.回顾 ...
PHP100视频教程13:PHP+MYSQL分页原理 PHP100视频教程14:PHP上传原理及应用 PHP100视频教程15:PHP生成HTML文件原理 PHP100视频教程16:PHP小偷程序原理和实例 PHP100视频教程17:PHP面向对象开发的学习(一) ...