当前位置: 主页 > 浏览 >

解决Struts分页显示(转)

收藏 时间:2009-12-27 来源:查看 收藏:qqqqq 阅读:332 标签:数据 ?显示 ?建立 ?参数 ?数据库 ?执行 ?
解决Struts分页显示作者:李敏强 学习Struts已经有2个多月了,前几天群里的朋友问我Struts分页显示的问题,觉得好像与在jsp中的差不多,但还是遇到了这样那样的问题,好不容易花了几天时间把问题都搞清楚,觉得还是写点东西跟大家分享一下的好!至于Struts的语法这里就不多介绍了,不懂的朋友可以先看网上的其他文章。一 开发环境Elicpse+Struts Studio+SqlServer
解决Struts分页显示
作者:李敏强??
学习Struts已经有2个多月了,前几天群里的朋友问我Struts分页显示的问题,觉得好像与在jsp中的差不多,但还是遇到了这样那样的问题,好不容易花了几天时间把问题都搞清楚,觉得还是写点东西跟大家分享一下的好!
至于Struts的语法这里就不多介绍了,不懂的朋友可以先看网上的其他文章。

一?开发环境
Elicpse+Struts?Studio+SqlServer2000+Tomcat。

二?开发思路
既然讲的是Struts,那自然离不了MVC,分页显示也是如此。

1?建立适当的模型组件,对应你要查询数据库中的表。这部分由我们熟悉的javaBean来充当。并在其中建立数据库查询方法,该方法需要一个java.sql.Conntection类型的参数,并返回一个ArrayList。在本例中为?Book.java

2?建立分页所需要的模型组件,也是由javaBean来充当,通过由Book中提供的ArrayList来构造。本例中为?PageBean.java.。

3建立控制器组件,这部分由Struts?中的Action来实现。主要负责将实例化Book,并利用返回的ArrayList对象,构造PageBean。以及接收由视图传递而来的action参数。从而在PageBean对象中调用不同的方法,该方法返回Book[]?对象。最后将?Book[]和PageBean放入request中。本例中为PageListAction.java。

4建立视图组件,这部分由jsp来充当,为了不出现java?代码,我们使用Struts提供的标签库,主要负责从request中取出刚刚放入的对象,通过反复调用PageListAction以及action参数,而实现分页显示。本例中为pagetest.jsp.
5?建立并配置struts-config.xml。
6?建立数据库。

三?实例代码
1?Book.java

package?bean;
import?java.sql.*;
import?java.util.ArrayList;
/**
?*?@作者?李敏强
?*?Struts分页显示数据Bean,对应数据库中Book表
?*/
public?class?Book?{
?private?String?bookname;?//书名
?private?String?author;???//作者
?private?String?price;????//价格
?
public?Book(String?name,String?author,String?price){
?this.bookname=name;
?this.author=author;
?this.price=price;
}

?public?String?getAuthor()?{
??return?author;
?}

?public?void?setAuthor(String?author)?{
??this.author?=?author;
?}

?public?String?getBookname()?{
??return?bookname;
?}

?public?void?setBookname(String?bookname)?{
??this.bookname?=?bookname;
?}
?
?public?String?getPrice(){
?????return?this.price;?
?}
?
?public?void?setPrice(String?price){
?????this.price=price;?
?}
?
?public?static?ArrayList?getAllBook(Connection?connection){
???String?sql="select?*?from?book";
???ArrayList?arrayList?=?new?ArrayList();
???try{
???Statement?statement?=?connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
???ResultSet?resultSet?=?statement.executeQuery(sql);??
?????????System.out.println("BookBean?数据查询已完成!");
??????while(resultSet.next())
??????{??
????????String?name?=?resultSet.getString("name");
????????String?author?=?resultSet.getString("author");
????????String?price?=?resultSet.getString("price");
????????System.out.println("开始数据封装:name="+name+"author="+author+"price="+price);
????????Book?book?=?new?Book(name,author,price);???????
????????arrayList.add(book);
??????}
????connection.close();
????resultSet.close();
???}catch(SQLException?e)
???{
????System.out.println("数据库异常"+e.toString());
???}

??????return?arrayList;
?}
}

2?PageBean.java
package?page;
import?bean.Book;
import?java.util.*;
/**
?*?@作者?李敏强
?*?Struts分页显示逻辑Bean
?*/
public?class?PageBean?{

?int?currentPage=1;??//当前页
public?int?totalPages=0;??//总页数
?int?pageRecorders=5;//每页5条数据
?int?totalRows=0;??//总数据数
?int?pageStartRow=0;//每页的起始数
?int?pageEndRow=0;??//每页显示数据的终止数
?boolean?hasNextPage=false;?//是否有下一页
?boolean?hasPreviousPage=false;?//是否有前一页
?ArrayList?arrayList;
?Iterator?it;
public?PageBean(){}
?
public?PageBean(ArrayList?arrayList){
?this.arrayList=arrayList;?
?totalRows=arrayList.size();??
????it=arrayList.iterator();??
?hasPreviousPage=false;
?currentPage=1;
?if((totalRows%pageRecorders)==0)
?{
?totalPages=totalRows/pageRecorders;??
?}
?else
?{
??totalPages=totalRows/pageRecorders+1;?
?}?
?
?if(currentPage>=totalPages)??
?{
??hasNextPage=false;?
?}
?else????????????????????????
?{
??hasNextPage=true;
?}

????
????if(totalRows<>
????{
????this.pageStartRow=0;???????????
????this.pageEndRow=totalRows;???
????}
????else???????????????????????
????{
????this.pageStartRow=0;?????????
????this.pageEndRow=pageRecorders;???
????}

}

?/**
??*?@return?Returns?the?currentPage.
??*/
?public?String?getCurrentPage()?{
??return?this.toString(currentPage);
?}
?/**
??*?@param?currentPage?The?currentPage?to?set.
??*/
?public?void?setCurrentPage(int?currentPage)?{
??this.currentPage?=?currentPage;
?}
?/**
??*?@return?Returns?the?pageRecorders.
??*/
?public?int?getPageRecorders()?{
??return?pageRecorders;
?}
?/**
??*?@param?pageRecorders?The?pageRecorders?to?set.
??*/
?public?void?setPageRecorders(int?pageRecorders)?{
??this.pageRecorders?=?pageRecorders;
?}
?/**
??*?@return?Returns?the?pageEndRow.
??*/
?public?int?getPageEndRow()?{
??return?pageEndRow;
?}
?/**
??*?@return?Returns?the?pageStartRow.
??*/
?public?int?getPageStartRow()?{
??return?pageStartRow;
?}
?/**
??*?@return?Returns?the?totalPages.
??*/
?public?String?getTotalPages()?{
?
??return?this.toString(totalPages);
?}
?/**
??*?@return?Returns?the?totalRows.
??*/
?public?String?getTotalRows()?{
??return?this.toString(totalRows);
?}
?/**
??*?@return?Returns?the?hasNextPage.
??*/
?public?boolean?isHasNextPage()?{
??return?hasNextPage;
?}
?/**
??*?@param?hasNextPage?The?hasNextPage?to?set.
??*/
?public?void?setHasNextPage(boolean?hasNextPage)?{
??this.hasNextPage?=?hasNextPage;
?}
?/**
??*?@return?Returns?the?hasPreviousPage.
??*/
?public?boolean?isHasPreviousPage()?{
??return?hasPreviousPage;
?}
?/**
??*?@param?hasPreviousPage?The?hasPreviousPage?to?set.
??*/
?public?void?setHasPreviousPage(boolean?hasPreviousPage)?{
??this.hasPreviousPage?=?hasPreviousPage;
?}
public?Book[]?getNextPage(){
?
?currentPage=currentPage+1;
?System.out.println("PageBean.getNextPage()正在执行;");
?System.out.println("参数currentPage="+currentPage);

?if((currentPage-1)>0)
?{
??hasPreviousPage=true;?
?}
????else
????{
?????hasPreviousPage=false;?
????}
?
?if(currentPage>=totalPages)?
?{
??hasNextPage=false;?
?}
?else
?{
??hasNextPage=true;
?}
?System.out.println("参数hasNextPage="+hasNextPage);
?System.out.println("准备执行PageBean.getBooks()");
?Book[]?books=getBooks();
?this.description();
?
?return?books;
}

public?Book[]?getPreviouspage(){
?
?currentPage=currentPage-1;

????if(currentPage==0){currentPage=1;}
?
?if(currentPage>=totalPages)??
?{
??hasNextPage=false;?
?}
?else?????????????????????????
?{
??hasNextPage=true;
?}
?if((currentPage-1)>0)
?{
??hasPreviousPage=true;?
?}
????else
????{
?????hasPreviousPage=false;?
????}
?Book[]?books=getBooks();
?this.description();
?return?books;
}

public?Book[]?getBooks(){
?System.out.println("pageBean.getBooks()开始执行;");
?
?
?if(currentPage*pageRecorders
??pageEndRow=currentPage*pageRecorders;
?????pageStartRow=pageEndRow-pageRecorders;
?}
?else{
??pageEndRow=totalRows;
??pageStartRow=pageRecorders*(totalPages-1);
?}
?Book[]?books=new?Book[pageEndRow-pageStartRow+1];
?
?System.out.println("pageStartRow="+pageStartRow);
?System.out.println("pageEndRow="+pageEndRow);
??int?j=0;?
?for(int?i=pageStartRow;i<>
?{
?
??Book?book=(Book)arrayList.get(i);?
??books[j++]=book;
?
?}
?System.out.println("要显示的页面数据已经封装,具体信息如下:");
?this.description();
?return?books;
}

public?String?toString(int?temp)
{
String?str=Integer.toString(temp);
return?str;
}

public?void?description()
{

???String?description="共有数据数:"+this.getTotalRows()+

???"共有页数:?"+this.getTotalPages()?+

???"当前页数为:"+this.getCurrentPage()+
???
???"?是否有前一页:?"+this.isHasPreviousPage()?+

???"?是否有下一页:"+this.isHasNextPage()+

???"?开始行数:"+this.getPageStartRow()+

???"?终止行数:"+this.getPageEndRow();

???System.out.println(description);

}
}

3??PageListAction.java
package?page;
import?org.apache.struts.action.*;
import?javax.servlet.http.*;
import?comm.Constants;

import?bean.Book;
import?java.util.*;
import?javax.sql.DataSource;
/**
?*?@author?李敏强
?*?Struts分页显示Action
?*/
public?class?PageListAction?extends?Action?{

?public?PageListAction(){}
?ArrayList?arrayList=new?ArrayList();
????PageBean?pb;
?
?public?ActionForward?execute(ActionMapping?mapping,?ActionForm?form,?HttpServletRequest?request,?HttpServletResponse?response)?throws?Exception?{???
String?action;?
action=request.getParameter("action");???
if(action==null?||?action.equals("null")){?//第一次读取数据
try{
DataSource?datasource=this.getDataSource(request,Constants.DATASOURCE_KEY);????
arrayList=Book.getAllBook(datasource.getConnection());
System.out.println("第一步,数据已经成功传递到Action,action="+action);
???}catch(Exception?e){
??????????e.printStackTrace();
??System.out.println("数据库连接出现异常");
??????}?
???
?????pb=new?PageBean(arrayList);
??????????Book[]?books=pb.getBooks();
??????????pb.description();
??????????request.setAttribute("result",books);
??????????request.setAttribute("page",pb);
???????????????????
???}
???else
???{
??if(action=="nextPage"?||?action.equals("nextPage"))
??{
??System.out.println("参数action="+action);
??System.out.println("函数pb.getNextPage()准备执行");
??Book[]books=pb.getNextPage();
??request.setAttribute("page",pb);
?request.setAttribute("result",books);???
????}
if(action=="previousPage"?||?action.equals("previousPage"))
??{
??System.out.println("参数action="+action);
??System.out.println("函数pb.getPreviouspage()准备执行");
??Book[]?books=pb.getPreviouspage();??
??request.setAttribute("page",pb);
???????????????request.setAttribute("result",books);
????
????}
???}
???return?(mapping.findForward("success"));
??}?
}

4?pagetest.jsp
<%@?taglib?uri="/WEB-INF/struts-logic.tld"?prefix="logic"?%>
<%@?taglib?uri="/WEB-INF/struts-bean.tld"?prefix="bean"?%>
<%@?taglib?uri="/WEB-INF/struts-html.tld"?prefix="html"?%>
<%@?page?contentType="text/html;?charset=gb2312"?language="java"%>








书名作者价格




?
??
?






nextPage?


PreviousPage

共有数据总数;
共分页,当前是第




5?struts-config.xml


??????????"-//Apache?Software?Foundation//DTD?Struts?Configuration?1.1//EN"
??????????"
http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd";>


?
??
???
???
???
???
???
???
???
???
??
?

??
??

??
??

??
??
??
??
??

??
??



6?建立eBookStore数据库,以及表book(name,author,parce);其中数据的配置可以根据你的不同情况在struts-config.xml中而定。

7?Constants.java?

package?comm;

/**
?*?this?interface?provides?the?constant?string?for?applicator?constant
?*/
public?class?Constants?{
??/**
????*?name?of?the?User?Object?in?HttpSession
????*/
???public?static?String?USER_KEY="user";
???/**
????*?dataSource?name
????*/
???public?static?String?DATASOURCE_KEY="dataSource";
}


顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论 所有评论
你还没登录,请先登录后再来评论!
推荐内容
新知先觉