说道Struts自然是不能离开MVC模式,分页显示也是如此.我不知道我的算法是不是算好的,也希望看过的朋友能发表一下自己的看法,下面简单阐述一下主要的开发思路:
1)建立适当的模型组件,对应你要查询数据库中的表,这部分由熟悉的JavaBean来充当.并在其中建立数据库查询方法,该方法需要一个java.sql.Conntection类型的参数,并返回一个ArrayList,在本例中为Book.java,另外还有一个数据库连接的Bean是SqlBean.java.
2)建立分页所需要的模型组件,也是用JavaBean,通过Book提供的ArrayList来构造,这里用的是PageBean.java.
3)建立控制器组件,这部分由Struts的Action来实现,主要负责实例化Book,并利用返回的ArrayList对象,构造PageBean,以及接收由视图传递来的action参数,从而在PageBean对象中调用不同的方法,该方法返回Book[]对象,最后将Book[]和PageBean放入到request中.本Action为PageListAction.java.
4)建立视图组件,这部分JSP来实现,为了不出现JAVA代码,使用Struts提供的标签库,主要负责从Request中取出刚刚放入的对象,通过反复调用Action以及action参数,而实现分页显示,是pagetest.jsp.
5)建立并配置struts-config.xml和web.xml文件.
6)建立数据库.
我对代码进行了实现,调试通过.如果大家有更好的用Struts实现分页显示的算法可以给我留言,代码如下:
struts-config.xml文件如下,这里配置了一个接收haha的请求提交给PageListAction
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<action-mappings>
<action path="/haha"
type="page.PageListAction"
scope="request">
<forward name="success" path="/pagetest.jsp"/>
</action>
</action-mappings>
<message-resources parameter="ApplicationResources" />
</struts-config>
……………………………………………………………………………….
Web.xml文件如下,这里配置了Web的信息,基本都是由Eclipse完成的
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
…………………………………………………………………………
这个是控制器Action类
package page;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import bean.Book;
import java.util.*;
import javax.sql.DataSource;
public class PageListAction extends Action {
ArrayList arrayList=new ArrayList();
PageBean pd;
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 {
arrayList=Book.getAllBook();
}
catch(Exception e) {
e.printStackTrace();
}
pd=new PageBean(arrayList);
Book[] books=pd.getBooks();
request.setAttribute("result",books);
request.setAttribute("page",pd);
}
else {
if(action=="nextPage"||action.equals("nextPage")) {
Book[] books=pd.getNextPage();
request.setAttribute("result",books);
request.setAttribute("page",pd);
}
if(action=="previousPage"||action.equals("previousPage")) {
Book[] books=pd.getPreviousPage();
request.setAttribute("resule",books);
request.setAttribute("page",pd);
}
}
return mapping.findForward("success");
}
}
………………………………………………………………………………….
这个是pagebean类,主要负责分页算法和逻辑处理
package page;
import bean.Book;
import java.util.*;
public class PageBean {
int currentPage=1;//当前页数
public int totalPages=0;//总页数
int pageRecorders=2;//每页显示数
int totalRows=0;//总数据数
int pageStartRow=0;//每页的起始数
int pageEndRow;//每页的终止数
boolean hasNextPage=false;//是否有下一页
boolean hasPreviousPage=false;//是否有前一页
ArrayList arrayList;
Iterator it;
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<pageRecorders) {
this.pageStartRow=0;
this.pageEndRow=totalRows;
}
else {
this.pageStartRow=0;
this.pageEndRow=pageRecorders;
}
}
public void setCurrentPage(int currentPage) {
this.currentPage=currentPage;
}
public void setPageRecorders(int pageRecorders) {
this.pageRecorders=pageRecorders;
}
public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage=hasNextPage;
}
public void setHasPreviosPage(boolean hasPreviosPage) {
this.hasPreviousPage=hasPreviousPage;
}
public String getCurrentPage() {
return this.toString(currentPage);
}
public String getTotalPages() {
return this.toString(totalPages);
}
public String getTotalRow() {
return this.toString(totalRows);
}
public int getPageRecorders() {
return pageRecorders;
}
public int getPageEndRow() {
return pageEndRow;
}
public int getPageStartRow() {
return pageStartRow;
}
public boolean isHasNextPage() {
return hasNextPage;
}
public boolean isHasPreviousPage() {
return hasPreviousPage;
}
public Book[] getNextPage() {
currentPage=currentPage+1;
if((currentPage-1)>0) {
hasPreviousPage=true;
}
else {
hasPreviousPage=false;
}
if(currentPage>=totalPages) {
hasNextPage=false;
}
else {
hasNextPage=true;
}
Book[] books=getBooks();
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();
return books;
}
public Book[] getBooks() {
if(currentPage*pageRecorders<totalRows) {
pageEndRow=currentPage*pageRecorders;
pageStartRow=pageEndRow-pageRecorders;
}