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以外,发生了查询的是同一条数据。
分享到:
相关推荐
以下是对分页原理的详细解释。 首先,我们从MySQL的角度理解分页。在MySQL中,可以使用`SELECT`语句配合`LIMIT`关键字来实现分页。例如,如果有一个名为`table`的表,要获取前10条记录,我们可以使用如下SQL查询: ...
【DOMINO表单分页实现原理】 在DOMINO开发中,实现表单分页是提高用户体验和优化数据加载的关键技术。通常,有两种方法可以达到这一目标:通过代理(Proxy)和使用JavaScript代码。 1. **代理(Proxy)实现分页**: ...
MySQL分页的原理和效率提升方法涉及到的几个关键点如下: 1. 分页查询的原理:在MySQL中,分页查询通常使用LIMIT和OFFSET关键字来实现。基本格式为LIMIT offset, count。其中offset指的是从哪一行开始返回数据,...
**PHP+MySQL分页原理与实现** 在网页开发中,当数据量较大时,一次性将所有数据加载到页面上不仅会影响用户体验,也会增加服务器负担。因此,分页显示成为了一个必要的解决方案。本篇将深入讲解PHP与MySQL结合实现...
AJAX(Asynchronous JavaScript and XML)分页技术是一种在网页不刷新的情况下,通过JavaScript与服务器进行异步数据交互...但无论采用何种技术,了解AJAX分页的基本原理和实现方式,对于任何Web开发者来说都是有益的。
以上代码是一个简化的示例,实际应用中可能需要考虑更多细节,如错误处理、无限滚动分页、动态加载数据等。在项目中,你还可以使用现成的分页库,如jQuery的`bootstrap-paginator`或纯JavaScript的`paginator.js`,...
为了找到每一页最后一条数据,每个文档必须有一个全局唯一值,这种分页方式其实和目前 moa 内存中使用 rbtree 分页的原理一样,官方推荐使用 `_id` 作为全局唯一值,其实使用业务层的 id 也可以。 第二页的请求,...
**Ajax分页原理:** Ajax分页的基本原理是通过JavaScript异步发送HTTP请求到服务器,请求只获取当前页所需的数据,然后在客户端用JavaScript动态地将这些数据插入到网页中。这样用户可以在浏览页面时保持交互性,而...
5. 错误处理:处理可能出现的网络错误、数据库错误或其他异常情况。 在提供的压缩包文件“PagerControlTest”中,可能包含了实现上述功能的一个示例项目,包括分页控件的代码和测试用例。通过研究这些代码,开发者...
首先,我们需要理解分页的基本原理。分页通常是通过在后台服务器上对数据进行切片,每次请求只加载一部分数据,而不是一次性加载所有内容。这可以通过网络API调用来实现,如使用Retrofit或Volley库。在客户端,我们...
- **错误处理**:处理AJAX请求可能出现的错误,如网络中断,提供友好的错误提示。 - **用户体验**:添加加载指示器,让用户知道内容正在加载;考虑无数据和最后一页的特殊处理。 通过以上分析,我们了解到jQuery ...
一、理解分页原理 分页的基本思想是根据每一页显示的数据量,从数据库中查询相应范围的数据,然后在网页上呈现。关键参数包括当前页数、每页显示的记录数以及总记录数。 二、ASP分页基础 在ASP中,我们通常会使用...
6. **错误处理与兼容性**:讨论Ajax请求可能出现的错误,如网络中断、请求超时等,并学习如何进行错误处理。同时,确保在不同浏览器中的兼容性。 7. **优化与最佳实践**:介绍一些提高性能和用户体验的策略,比如...
首先,让我们了解动态分页的基本原理。动态分页是指在用户滚动或点击分页按钮时,仅加载当前显示的数据,而不是一次性加载所有数据。这种做法提高了页面加载速度,减少了服务器压力,并优化了用户体验。 **一、...
总结,C# .NET中的分页控件是Web开发中的重要组成部分,通过理解其工作原理和源码,开发者可以更好地实现高效、用户体验良好的数据展示。"hongxu"项目的源码提供了自定义分页控件的具体实现,通过学习和分析,可以...
ASP分页技术是Web开发中一个重要的概念,用于处理大量数据时分割长列表或内容,以便用户能够方便地逐页浏览。在这个ASP分页教程中,我们将深入理解如何实现简单的分页...不过,理解基本的分页原理仍然是至关重要的。
2. **错误处理**:当请求失败或数据异常时,应有适当的错误提示和恢复机制。 3. **性能优化**:避免一次性加载大量数据,影响页面加载速度。 通过以上步骤和策略,我们可以利用JavaScript有效地实现一个具有交互性...
一、分页原理与设计 1. 分页的基本概念:分页是将数据库中的大量数据分为若干页进行显示,用户可以逐页浏览,减少一次性加载的数据量,提高页面响应速度。 2. 分页参数:通常包括当前页码(PageNo)、每页条数...
#### 二、PHP分页原理及步骤 1. **获取总记录数**:首先需要查询数据库中的总记录数。 2. **设置每页显示记录数**:根据需求设定每页显示的数据条数。 3. **计算总页数**:通过总记录数除以每页显示的记录数得到总...
5. **错误处理**:良好的分页类应该包含错误处理机制,以应对可能出现的问题,如无效的页码输入或数据库连接问题。 6. **重用性与灵活性**:一个优秀的分页类应设计成可复用的,允许开发者自定义样式、链接格式等,...