posts - 1, comments - 1, trackbacks - 0, articles - 13
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          日歷

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          隨筆檔案

          搜索

          •  

          最新評論

          • 1.?re: jsf
          • 評論內容較長,點擊標題查看
          • --re: jsfre: jsfre: jsfre: jsfre: jsf

          JSF中實現分頁(一)

          Posted on 2007-06-12 16:51 Linden.zhang 閱讀(179) 評論(0)  編輯  收藏 所屬分類: Jsf
           對于大多數Web應用,分頁都是必不可少的功能,當然在JSF中也一樣,我在這里用兩篇文章介紹兩種方法來展示一下,如何在JSF中實現分頁。本文假定你已經對JSF有了一些簡單的了解,懂得基本配置和使用,并建立起一個blank項目。

               MyfacesApache基金會中的一個一級項目,除了實現JSF標準外,做了很多的擴展工作,在Myfaces包中有一個擴展包Tomahawk,我們將主要使用其中的兩個Component實現分頁:一個是<t:dataTable>,另一個是<t:dataScroller>,在第一篇里面,我們簡易的組合這兩個Component來實現一種簡單,但并不高效的分頁。

               下面的例子來自于Myfaces-Sample,我省去了其中和分頁邏輯無關的內容,詳細的例子可以下載Myfaces-Sample包或者訪問http://www.irian.at/myfaces/home.jsf 查看。

               第一部分:dataTable

          <t:dataTable id="data"
                            var
          ="car"
                            value
          ="#{pagedSort.cars}"
                            rows
          ="10">
              ……
          </t:dataTable>

          在這一部分中,dataTable綁定了一個backing bean - pagedSort中的cars屬性,我們可以在這個屬性中加入數據訪問邏輯,從數據庫或者其他來源取得用于顯示的數據。比如我們可以通過Hibernate獲取一個List,其中包含有我們用于顯示的POJOs

          注意,dataTable中的rows屬性指的是每頁的行數,是必須指定的,否則是無法進行分頁的,如果在項目中會使用固定行數的分頁,建議把這個值寫在BaseBackingBean中,并暴露一個property,供頁面調用,所以每次在頁面中就可以這么寫#{backingBean.pageSize}

          第二部分:dataScroller

              <t:dataScroller id="scroll_1"
                                  for
          ="data"
                                  fastStep
          ="10"
                                  paginator
          ="true"
                                  paginatorMaxPages
          ="9">
                      
          <f:facet name="first" >
                          
          <t:graphicImage url="images/arrow-first.gif" border="1" />
                      
          </f:facet>
                      
          <f:facet name="last">
                          
          <t:graphicImage url="images/arrow-last.gif" border="1" />
                      
          </f:facet>
                      
          <f:facet name="previous">
                          
          <t:graphicImage url="images/arrow-previous.gif" border="1" />
                      
          </f:facet>
                      
          <f:facet name="next">
                          
          <t:graphicImage url="images/arrow-next.gif" border="1" />
                      
          </f:facet>
                      
          <f:facet name="fastforward">
                          
          <t:graphicImage url="images/arrow-ff.gif" border="1" />
                      
          </f:facet>
                      
          <f:facet name="fastrewind">
                          
          <t:graphicImage url="images/arrow-fr.gif" border="1" />
                      
          </f:facet>
                  
          </t:dataScroller>


              這里定義了我們用于分頁的<t:dataScroller>,最主要的是配置該分頁Component針對哪個dataTable進行分頁的“for”屬性,該屬性與dataTable綁定,并對其進行分頁,在這里,綁定了第一部分中的id="data"dataTable,下面有很多的<t:facet>是指定分頁的導航樣式的,這里使用了圖片作為導航,可以把他們改成文字形式的導航。

              當然這只是最簡單,也是一種不推薦的分頁方式,因為在每次進行分頁的時候,將會從數據庫中取回所有的記錄放入List中,然后,dataScroller在對這個List進行分頁,如果在數據量很大的情況下,這種方式顯然是不符合要求的,假設每條記錄占用1k內存,數據庫中有100萬條記錄,每次要把這個List全部讀取出來將占用1G內存。我們需要一種Load on demand方式的讀取,也就是只在需要查看某頁的時候讀取該頁的數據。

              另外一方面,JSF的生命周期中有多個階段會調用到#{pagedSort.cars}中對應的方法,如果在這里調用了數據訪問邏輯,就會在只顯示一次頁面的情況下進行多次數據庫操作,也是相當的耗費資源的。

              所以我們需要有更好的分頁方式去解決以上問題,下一篇我將介紹另一種方法以改善這些問題。

          主站蜘蛛池模板: 田阳县| 理塘县| 军事| 宝兴县| 兖州市| 云安县| 桃园市| 崇文区| 获嘉县| 屏东市| 黎川县| 民勤县| 东至县| 兴宁市| 万山特区| 白沙| 嫩江县| 开化县| 龙井市| 连城县| 青浦区| 德化县| 大同市| 定结县| 鄂州市| 平湖市| 咸阳市| 合川市| 漳平市| 盐池县| 金华市| 谢通门县| 马鞍山市| 贡觉县| 台州市| 曲阜市| 四川省| 藁城市| 微山县| 泌阳县| 永川市|