<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java學習

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

     

    在JSF中實現分頁(三)


    zhuan(http://www.steadyxp.com/archives/189.html)

    好久沒有寫點東西了,這次想把JSF中的分頁系列文章再擴充一點,說明一下查詢和分頁結合的情況,當我們把查詢條件和查詢結果放到一個頁面上時,查詢還是非常容易實現的,甚至不需要我們手工去從數據庫中查詢。

    在本系列文章中的第二篇中,介紹了一種 Load On Demand的方式,我們在這里需要繼續利用這種方式,并對其做一些小小的擴展。這里我們使用 Hibernate3 作為持久化方案。

    簡單的介紹一下應用情景,一個系統中包含了一些 Customer 的信息,我們需要對其進行查詢并對查詢結果進行分頁。

    首先處理條件查詢的情況,通常會根據 VO 中的字段進行 like 型查詢,有時候時間或數字之類的會使用Between查詢,因為查詢條件一般不會很復雜,在這里,使用 Hibernate3 中的 Criteria 查詢來處理這樣的情況,我們把所有的查詢條件通過 Customer 這個 VO 傳進來,然后只對非空字段進行 like 查詢,我們用到這樣的方法。

    public  List queryByConditions(Customer customer,  int  startRow,  int  pageSize)
    {
     Criteria criteria  =  getSession().createCriteria(Customer. class );
      if  ( ! StringUtils.isEmpty(customer.getCustomerName()))
     {
      criteria.add(QueryUtils.getCriteriaParam( ” customerName ” , customer.getCustomerName()));
     }
      if  ( ! StringUtils.isEmpty(customer.getAddress()))
     {
      criteria.add(QueryUtils.getCriteriaParam( ” address ” , customer.getAddress()));
     }
      if  ( ! StringUtils.isEmpty(customer.getFax()))
     {
      criteria.add(QueryUtils.getCriteriaParam( ” fax ” , customer.getFax()));
     }
      return  criteriaPagedList(criteria, startRow, pageSize);
    }
    另外對應的一個count方法略去,只需要在前面加入一個
    criteria.setProjection(Projections.count(”customerId”));

    因為考慮到以后的擴展,使用了一個Utils方法,QueryUtils.getCriteriaParam方法

    public   static   final  SimpleExpression getCriteriaParam(String name, String param)
    {
      return  Expression.like(name,  ” % “   +  param  +   ” % ” );
    }
    我們可以很容易的在 Backing Bean 上通過 Service 層拿到這個查詢結果的 List 和 Count 值,相關的getDatePage方法如下。
    如果你不了解這個 getDataPage 方法的含義,請仔細閱讀“在JSF中實現分頁(二)”一文,并仔細思考該方法的含義。

    protected  DataPage getDataPage( int  startRow,  int  pageSize)
    {
     List queryCustomerList  =  customerService.queryCustomer(customer,  this .startRow,  this .getPageSize());
      int  dataSetSize  =  customerService.countQueryCustomer(customer);
      return   new  DataPage(dataSetSize, startRow, queryCustomerList);
    }
    在同一個 Backing Bean 中,我們放了一個存放查詢條件的VO - Customer,并在頁面中使用<t:saveState>保存其狀態,使其查詢條件不會隨著翻頁而丟失。

    <t:saveState value=”#{customerListBean.customer}”/>

    在頁面中,我們把所有的查詢條件都放到該 VO 中,在 getDataPage 方法中就會在適當的時候調用新的查詢條件來查詢新的數據,這一切都不需要我們動手的。

    在 Backing Bean 中有這樣的一個方法:

    public  String query()
    {
     dataModel.setWrappedData(getDataPage( 0 , getPageSize()));
      return   ” success ” ;
    }
    只是把數據清空,并強制 PagedListDataModel 讀取數據,然后我們返回相同的頁面,這個時候,系統按照用戶輸入的查詢條件拿到查詢結果以后,返回同一頁面,該頁面中的使用 LocalDataModel 的那個 DataTable 就會把結果顯示出來。

    請注意,這里 LocalDataModel 和 Customer 都在同一個 Backing Bean 中。

    是不是覺得很簡單呢,一切都歸功于 getDataPage 這個方法,我們幾乎不需要做什么額外的操作就可以達到我們的目的。

    因為該方法在一個商業項目中使用,代碼不便公布,只能把里面的一些代碼抽取出來,零零碎碎的拿給大家看

    ,

    引用地址:http://www.steadyxp.com/archives/189.html

    posted on 2009-03-09 15:45 找個美女做老婆 閱讀(189) 評論(0)  編輯  收藏


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


    網站導航:
     

    導航

    統計

    公告

    本blog已經搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩国产精品亚洲а∨天堂免| 理论片在线观看免费| 亚洲人成网7777777国产| 国产成人精品免费大全| 亚洲精品国产成人专区| 亚洲精品免费网站| 国产亚洲女在线线精品| 处破痛哭A√18成年片免费| 精品一区二区三区无码免费直播| 国产亚洲免费的视频看| 啦啦啦中文在线观看电视剧免费版 | 亚洲一级毛片在线观| 国产在线观看免费不卡| 国产一区二区三区免费| 亚洲激情视频图片| 国产亚洲AV手机在线观看| 99精品全国免费观看视频| 大妹子影视剧在线观看全集免费| 日本免费人成视频播放| 日韩电影免费在线观看| 国产精品亚洲专区无码唯爱网| 亚洲国产精品久久久久| 又黄又爽的视频免费看| 亚洲一区二区三区免费在线观看 | 一本岛高清v不卡免费一三区| 国产午夜亚洲精品不卡免下载| 亚洲天堂在线播放| 亚洲国产aⅴ综合网| 永久免费的网站在线观看| a级男女仿爱免费视频| 朝桐光亚洲专区在线中文字幕| 亚洲黄色在线观看视频| 国产av无码专区亚洲av果冻传媒 | 亚洲国产精品无码久久久蜜芽| 全免费一级毛片在线播放| 9420免费高清在线视频| 在线综合亚洲中文精品| 久久精品国产亚洲AV麻豆王友容 | 免费国产成人18在线观看| 最新亚洲人成无码网站| 亚洲精品中文字幕无码A片老|