| 
         
     
     | 
     | 
    
  
    | 
    解决Struts分页显示(转) | 
   
  
     | 
   
  
     | 
   
  
    | 
     作者:未知  来源:月光软件站  加入时间:2005-2-28 月光软件站  | 
   
  
    解决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<pageRecorders)      {     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<totalRows){//判断是否为最后一页   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<pageEndRow;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"%>
  <html:html locale="true"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body>
  <table border="1"> <tr><th>书名</th><th>作者</th><th>价格</th></tr> <logic:present name="result"> <logic:iterate id="book" name="result"  type="bean.Book" > <logic:present name="book"> <tr>  <td><bean:write name="book" property="bookname" /></td>  <td> <bean:write name="book" property="author" /></td>  <td><bean:write name="book" property="price" /></td> </tr> </logic:present> </logic:iterate> </logic:present> </table> <logic:equal name="page" property="hasNextPage" value="true"> <html:link page="/page.do?action=nextPage">nextPage</html:link>  </logic:equal> <logic:equal name="page" property="hasPreviousPage" value="true"> <html:link page="/page.do?action=previousPage">PreviousPage</html:link> </logic:equal> 共有数据总数<bean:write name="page" property="totalRows"/>; 共分<bean:write name="page" property="totalPages"/>页,当前是第 <bean:write name="page" property="currentPage"/>页 </body> </html:html>
  5 struts-config.xml <?xml version="1.0" encoding="ISO-8859-1" ?>
  <!DOCTYPE struts-config PUBLIC           "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"           " http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd";>
  <struts-config>  <data-sources>   <data-source key="dataSource" type="org.apache.commons.dbcp.BasicDataSource">    <set-property property="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>    <set-property property="url" value="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=eBookStore;SelectMethod=cursor"/>    <set-property property="username" value="limq"/>    <set-property property="password" value="1"/>    <set-property property="maxActive" value="10"/>    <set-property property="maxWait" value="5000"/>    <set-property property="defaultAutoCommit" value="true"/>    <set-property property="defaultReadOnly" value="false"/>   </data-source>  </data-sources>   <form-beans>   </form-beans>   <global-forwards>   </global-forwards>   <action-mappings>   <action path="/page" type="page.PageListAction" scope="request">   <forward name="success" path="/pagetest.jsp"/>   </action>   </action-mappings>   <controller>   </controller> </struts-config>
  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"; }
  
 
  | 
   
  
     | 
   
  
     相关文章:相关软件:  | 
   
   
      |