<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)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产黄色免费观看| 亚洲剧场午夜在线观看| 亚洲av成人片在线观看| 国产福利在线免费| 搜日本一区二区三区免费高清视频| 18禁成年无码免费网站无遮挡 | 亚洲av再在线观看| 亚洲另类无码专区首页| 四虎影院免费在线播放| 亚洲av永久中文无码精品| 99久久国产精品免费一区二区| 3d成人免费动漫在线观看| 亚洲区精品久久一区二区三区| 思思re热免费精品视频66| 婷婷综合缴情亚洲狠狠尤物| 久青草国产免费观看| 亚洲色欲色欲www在线丝 | 亚洲国产美女精品久久久久| 亚洲免费在线观看视频| 亚洲国产成人99精品激情在线| 黄网址在线永久免费观看| 亚洲AV无码久久精品蜜桃| 亚洲av纯肉无码精品动漫| 亚洲国产成人VA在线观看| 99久久国产精品免费一区二区 | 亚洲欧洲日产国码无码网站| 三上悠亚在线观看免费| 日本免费中文字幕在线看| 成人久久久观看免费毛片| 亚洲AV无码一区二区三区DV| 四虎成年永久免费网站| 18禁亚洲深夜福利人口| 免费精品国偷自产在线在线| 精品国产亚洲AV麻豆| 亚洲国产精品无码久久一区二区| 国产a视频精品免费观看| 香港特级三A毛片免费观看| 亚洲成人在线电影| 青柠影视在线观看免费高清 | 看亚洲a级一级毛片| 亚洲国产AV无码专区亚洲AV|