欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
在JSF中實(shí)現分頁(yè)(三)

好久沒(méi)有寫(xiě)點(diǎn)東西了,這次想把JSF中的分頁(yè)系列文章再擴充一點(diǎn),說(shuō)明一下查詢(xún)和分頁(yè)結合的情況,當我們把查詢(xún)條件和查詢(xún)結果放到一個(gè)頁(yè)面上時(shí),查詢(xún)還是非常容易實(shí)現的,甚至不需要我們手工去從數據庫中查詢(xún)。

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

簡(jiǎn)單的介紹一下應用情景,一個(gè)系統中包含了一些 Customer 的信息,我們需要對其進(jìn)行查詢(xún)并對查詢(xún)結果進(jìn)行分頁(yè)。

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

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

另外對應的一個(gè)count方法略去,只需要在前面加入一個(gè)
criteria.setProjection(Projections.count("customerId"));

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

public   static   final  SimpleExpression getCriteriaParam(String name, String param)
{
 
return  Expression.like(name,  " % "   +  param  +   " % " );
}

我們可以很容易的在 Backing Bean 上通過(guò) Service 層拿到這個(gè)查詢(xún)結果的 List 和 Count 值,相關(guān)的getDatePage方法如下。
如果你不了解這個(gè) getDataPage 方法的含義,請仔細閱讀“在JSF中實(shí)現分頁(yè)(二)”一文,并仔細思考該方法的含義。

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

在同一個(gè) Backing Bean 中,我們放了一個(gè)存放查詢(xún)條件的VO - Customer,并在頁(yè)面中使用<t:saveState>保存其狀態(tài),使其查詢(xún)條件不會(huì )隨著(zhù)翻頁(yè)而丟失。

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

在頁(yè)面中,我們把所有的查詢(xún)條件都放到該 VO 中,在 getDataPage 方法中就會(huì )在適當的時(shí)候調用新的查詢(xún)條件來(lái)查詢(xún)新的數據,這一切都不需要我們動(dòng)手的。

在 Backing Bean 中有這樣的一個(gè)方法:

public  String query()
{
 dataModel.setWrappedData(getDataPage(
0 , getPageSize()));
 
return   " success " ;
}

只是把數據清空,并強制 PagedListDataModel 讀取數據,然后我們返回相同的頁(yè)面,這個(gè)時(shí)候,系統按照用戶(hù)輸入的查詢(xún)條件拿到查詢(xún)結果以后,返回同一頁(yè)面,該頁(yè)面中的使用 LocalDataModel 的那個(gè) DataTable 就會(huì )把結果顯示出來(lái)。

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

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

因為該方法在一個(gè)商業(yè)項目中使用,代碼不便公布,只能把里面的一些代碼抽取出來(lái),零零碎碎的拿給大家看,如果大家有什么疑問(wèn)的話(huà),可以在論壇上提出來(lái),我會(huì )盡力解答的,另外這個(gè)方法也會(huì )在空閑的時(shí)候 Merge 到 MyPSP 項目中去。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Tags
Hibernate Criteria 查詢(xún)---setFirstResult,setMaxResults用法,分頁(yè)查詢(xún)
Mysql和Oracle中的分頁(yè)機制各是什么?
oracle數據庫:jdbc通用sql分頁(yè)封裝
基于A(yíng)SP.NET的自定義分頁(yè)顯示 數據庫 分頁(yè)
我的php學(xué)習第二十三天——MySQL數據庫編程的步驟
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久