丄諦啲仇魜ヤ
          如 果 敵 人 讓 你 生 氣 , 那 說 明 你 沒 有 勝 他 的 把 握!
          posts - 6,comments - 56,trackbacks - 1

            目的:

          學習使用struts+hibernate實現一個通用的分頁程序。

          內容:

              分頁程序是網頁設計經常需要實現的基本功能。但有的分頁程序直接嵌在jsp頁面上,不僅工作量較大,代碼也難以重用。本次試驗將使用struts+hibernate來實現通用的分頁程序。不同功能的代碼盡量分離,以滿足通用性要求。

              首先需要建立一個表,如下Product,各字段設計如下(可自由更改):

              ID int primary key,

              Typeid varchar(20),

          Name   varchar(50),

          Price    varchar(20),

          Memo   varchar(100).

          步驟:

          建立web工程,名字為”Fenye”.

          2 添加hibernate,生成Product表的.hbm.xmlpojo類。這個很簡單,不再贅述。

          3 接著寫數據訪問層,我們將其分為DaoProDao兩個類。其中Dao是個公共的基類;ProDao繼承它,并與action通信取得參數。這樣設計的好處是:如果需要對User這個表進行分頁顯示,只需添加一個UserDao類,并讓它繼承Dao類。

          Dao類的代碼如下,可以根據需要添加:頭文件自己導入。

          public class Dao {

                  private Session session=null;

                  public Dao() {

                     }

                    

                     public Session getSession()

                  {

                       session = HibernateSessionFactory.getSession();

                         return session;       

                  }

                    public int getCount(String pojo)

                  {

                       String sql="select count(*) from "+pojo ;

                       this.getSession();

                     try {

                     Query q = getSession().createQuery(sql);

                       List cc = q.list();

                       Integer rows = (Integer) cc.get(0);

                     return rows.intValue();

                     } catch (HibernateException ex) {

                         System.out.print("ex::"+ex.getMessage());

                         return 0;

                     }

                  }

                  public List getlist(Query query, String pojo,int pagesize,int currow) throws HibernateException

                 {

                       List list = null;

                       this.getSession();

                      query.setFirstResult(currow);

                       query.setMaxResults(pagesize);

                       list=query.list();

                       //session.flush();

                       if(session!=null)

                               session.close();     

                       return list;

                  }

                  public List getlist(Query query,int pagesize,int currow)

                        {                  

                                String[] str = query.getQueryString().split("from");       

                                String[] table =str[1].trim().split(" ");        

                                System.out.println("table:"+table[0]);

                                return getlist(query,table[0],pagesize,currow);         

                        }

          }

          ProDao類的代碼如下:

          public class PinfoDao extends Dao{

                 private Session session;

                 public PinfoDao() {

                        super();

              }

                 public List list(int pagesize,int currow)

                 {

                       

                        Query query =getSession().createQuery("from PInfo");

                        List li=getlist(query, pagesize, currow);

                        return li;

                       

                 }

                  public Session getSession()

                  {

                       // Configuration config=null;

                    

                       session = HibernateSessionFactory.getSession();

                         return session; 

                  }

                 public int getCount()

                 {

                        String sql="select count(*) from PInfo";

                        Query q = getSession().createQuery(sql);

                        List cc = q.list();

                        Integer a = (Integer) cc.get(0);    

                        System.out.println("count:"+a.intValue());

                        return a.intValue();

                 }    

          }

          4         下面寫頁面控制程序,同樣將代碼分離為兩個類Page類和Pagehelp類。

          Page類處理頁面相關的一些設置,如一頁顯示多少條記錄,計算共有多少頁,共有多少記錄,當前頁碼等。

          PageHelp類接收jsp頁面傳來的參數,并調用Page類處理。

          Page類代碼:

          public class Page {

                  private int totalRows; //總行數

                     private int pageSize = 3; //每頁顯示的行數

                     private int currentPage; //當前頁號

                     private int totalPages; //總頁數

                     private int startRow; //當前頁在數據庫中的起始行

                     public Page(int totalRows1) {

                      totalRows = totalRows1;

                      totalPages=totalRows/pageSize;

                      int mod=totalRows%pageSize;

                      if(mod>0){

                        totalPages++;

                      }

                      currentPage = 1;

                      startRow = 0;

                    }

                    public int getStartRow() {

                      return startRow;

                    }

                    public int getTotalPages() {

                      return totalPages;

                    }

                    public int getCurrentPage() {

                      return currentPage;

                    }

                    public int getPageSize() {

                      return pageSize;

                    }

                    public void setTotalRows(int totalRows) {

                      this.totalRows = totalRows;

                    }

                    public void setStartRow(int startRow) {

                      this.startRow = startRow;

                    }

                    public void setTotalPages(int totalPages) {

                      this.totalPages = totalPages;

                    }

                    public void setCurrentPage(int currentPage) {

                      this.currentPage = currentPage;

                    }

                    public void setPageSize(int pageSize) {

                      this.pageSize = pageSize;

                    }

                    public int getTotalRows() {

                      return totalRows;

                    }

                    public void first() {

                      currentPage = 1;

                      startRow = 0;

                    }

                    public void previous() {

                      if (currentPage == 1) {

                        return;

                      }

                      currentPage--;

                      startRow = (currentPage - 1) * pageSize;

                    }

                    public void next() {

                      if (currentPage < totalPages) {

                        currentPage++;

                      }

                      startRow = (currentPage - 1) * pageSize;

                    }

                    public void last() {

                      currentPage = totalPages;

                      startRow = (currentPage - 1) * pageSize;

                    }

                    public void refresh(int _currentPage) {

                      currentPage = _currentPage;

                      if (currentPage > totalPages) {

                        last();

                      }

                    }

          }

          Pagehelp類代碼如下:

          public class Pagehelp {

                  public static Page getPager(HttpServletRequest httpServletRequest,int totalRows) {

                //定義pager對象,用于傳到頁面

                Page pager = new Page(totalRows);

                //Request對象中獲取當前頁號

                String currentPage = httpServletRequest.getParameter("currentPage");

                //如果當前頁號為空,表示為首次查詢該頁

                //如果不為空,則刷新page對象,輸入當前頁號等信息

                if (currentPage != null) {

                  pager.refresh(Integer.parseInt(currentPage));

                }

                //獲取當前執行的方法,首頁,前一頁,后一頁,尾頁。

                String pagerMethod = httpServletRequest.getParameter("pageMethod");

                if (pagerMethod != null) {

                  if (pagerMethod.equals("first")) {

                    pager.first();

                  } else if (pagerMethod.equals("previous")) {

                    pager.previous();

                  } else if (pagerMethod.equals("next")) {

                    pager.next();

                  } else if (pagerMethod.equals("last")) {

                    pager.last();

                  }

                }

                return pager;

              }

          }

          5         一切準備工作結束后,下面寫action來調用這些類。

          List list = null;//用于輸出到頁面的記錄集合

                         int totalRows;//記錄總行數

                         PinfoDao dao=new PinfoDao();

                         totalRows=dao.getCount();

                         System.out.print("總行數=="+totalRows);

                         Page page=Pagehelp.getPager(request,totalRows);

                         try {

                                list= dao.list(page.getPageSize(), page.getStartRow());

                         } catch (HibernateException ex) {

                             System.out.print("action里的錯誤="+ex.getMessage());

                         }

                         request.setAttribute("page",page);

                         request.setAttribute("list",list);

                         return mapping.findForward("list");

          6         最后是顯示頁面plist。在struts-config.xml文件中添加forward語句,<forward name="list" path="/plist.jsp"></forward>

          plist.jsp頁面部分代碼如下:

          <table align="center" border="1">

             <tr>

             <td>產品類別</td>

             <td>產品名稱</td>

             <td>產品價格</td>

             <td>產品備注</td>

             </tr>

          <!—下面打印list中的各屬性-->

                 <tr >

             <td colspan="4">

          <bean:write name="page" property="currentPage"/>

          <bean:write name="page" property="totalPages" />

          <html:link action="/page.do?pageMethod=first"

          paramName="page" paramProperty="currentPage"

          paramId="currentPage">首頁</html:link>

             <html:link action="/page.do?pageMethod=previous"

          paramName="page" paramProperty="currentPage"

          paramId="currentPage">上一頁</html:link>

             <html:link action="/page.do?pageMethod=next"

          paramName="page" paramProperty="currentPage"

          paramId="currentPage">下一頁</html:link>

             <html:link action="/page.do?pageMethod=last"

          paramName="page" paramProperty="currentPage"

          paramId="currentPage">尾頁</html:link>

          </td>

          </tr>        

          </table>

          7 測試:

          按照上述步驟完成后,在瀏覽器中輸入http://localhost:8080/Fenye/page.do查看頁面。

          posted on 2007-09-22 13:53 Crying 閱讀(1700) 評論(5)  編輯  收藏 所屬分類: 分頁

          FeedBack:
          # re: hibernate分頁1
          2008-10-15 16:26 | 456
          我用你的分面在PreDao類的 List li=getlist(query, pagesize, currow);
          報錯。找不到方法。請問怎么樣解決?  回復  更多評論
            
          # re: hibernate分頁1[未登錄]
          2008-10-19 11:21 | Crying
          @456
          在DAO類中啊  回復  更多評論
            
          # re: hibernate分頁1
          2008-10-20 15:09 | 456
          你好,上次是我沒有搞清楚,不好意思 。 但這次是真的報了個錯。
          Integer a = (Integer) cc.get(0); 類型轉化不了。  回復  更多評論
            
          # re: hibernate分頁1
          2009-01-16 16:09 | Luck_Li
          不錯的資源,實現了,很感謝wangsq,針對上面提出 的類型轉換可以改一下,我是這樣實現的:Integer rows = Integer.parseInt(cc.get(0).toString());

          希望可以幫到忙。  回復  更多評論
            
          # re: hibernate分頁1
          2012-12-14 18:41 | 婉兒
          對不上號啊,你的項目不全,我也出現以上錯誤!!  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
          相關文章:
           
          主站蜘蛛池模板: 磴口县| 凯里市| 建昌县| 枞阳县| 黔南| 白银市| 建始县| 日照市| 荔浦县| 舞钢市| 鹤岗市| 庄浪县| 综艺| 敦化市| 台北市| 通海县| 东明县| 通道| 渑池县| 霸州市| 上林县| 绥滨县| 桂阳县| 西丰县| 慈利县| 巴青县| 嘉兴市| 海南省| 莎车县| 娄烦县| 仁寿县| 长阳| 陇南市| 迁西县| 武安市| 旅游| 吴忠市| 德昌县| 梅州市| 武平县| 柳河县|