在JSF中實現分頁(三)

2021-04-12 23:49:44 字數 1919 閱讀 4068

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

在本系列文章中的第二篇中,介紹了一種 load on demand的方式,我們在這裡需要繼續利用這種方式,並對其做一些小小的擴充套件。這裡我們使用 hibernate3 作為持久化方案。

簡單的介紹一下應用情景,乙個系統中包含了一些 customer 的資訊,我們需要對其進行查詢並對查詢結果進行分頁。

首先處理條件查詢的情況,通常會根據 vo 中的字段進行 like 型查詢,有時候時間或數字之類的會使用between查詢,因為查詢條件一般不會很複雜,在這裡,使用 hibernate3 中的 criteria 查詢來處理這樣的情況,我們把所有的查詢條件通過 customer 這個 vo 傳進來,然後只對非空字段進行 like 查詢,我們用到這樣的方法。

public

list querybyconditions(customer customer, 

intstartrow, 

intpagesize)if(

!stringutils.isempty(customer.getaddress()))if(

!stringutils.isempty(customer.getfax()))

return

criteriapagedlist(criteria, startrow, pagesize);}

另外對應的乙個count方法略去,只需要在前面加入乙個

criteria.setprojection(projections.count("customerid"));

因為考慮到以後的擴充套件,使用了乙個utils方法,queryutils.getcriteriaparam方法

public

static

final

******expression getcriteriaparam(string name, string param)

我們可以很容易的在 backing bean 上通過 service 層拿到這個查詢結果的 list 和 count 值,相關的getdatepage方法如下。

如果你不了解這個 getdatapage 方法的含義,請仔細閱讀「在jsf中實現分頁(二)」一文,並仔細思考該方法的含義。

protected

datapage getdatapage(

intstartrow, 

intpagesize)

在同乙個 backing bean 中,我們放了乙個存放查詢條件的vo - customer,並在頁面中使用儲存其狀態,使其查詢條件不會隨著翻頁而丟失。

在頁面中,我們把所有的查詢條件都放到該 vo 中,在 getdatapage 方法中就會在適當的時候呼叫新的查詢條件來查詢新的資料,這一切都不需要我們動手的。

在 backing bean 中有這樣的乙個方法:

public

0, getpagesize()));

return

"success";

} 只是把資料清空,並強制 pagedlistdatamodel 讀取資料,然後我們返回相同的頁面,這個時候,系統按照使用者輸入的查詢條件拿到查詢結果以後,返回同一頁面,該頁面中的使用 localdatamodel 的那個 datatable 就會把結果顯示出來。

請注意,這裡 localdatamodel 和 customer 都在同乙個 backing bean 中。

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

因為該方法在乙個商業專案中使用,**不便公布,只能把裡面的一些**抽取出來,零零碎碎的拿給大家看,如果大家有什麼疑問的話,可以在論壇上提出來,我會盡力解答的,另外這個方法也會在空閒的時候 merge 到 mypsp 專案中去。

在mybatis中實現oracle分頁和模糊查詢

今天在工作中,遇到乙個業務需求,就是需要在oracle裡進行模糊查詢並分頁,sql語句如下 select m.label,m.building loc id,m.shape.minx x,m.shape.miny y from select rownum rnm t.from table test ...

JSF的伺服器端分頁的實現

相信對jsf有一定了解的童鞋,都知道怎麼用datagrid顯示資料,一般情況我都是用的都是客戶端分頁,閒來無事按照例子寫了個伺服器端分頁,話不多說,貼 inject value employeespringservice private iemployeeservice es bind id gri...

在listview中,實現 分頁載入 非同步載入

public voidonscroll abslistview view,intfirstvisibleitem,intvisibleitemcount,inttotalitemcount 語句解釋 為了頁面清晰,本範例僅僅將核心 列出來。變數currentpage代表當前已經載入了多少頁的資料。預...