日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

【第二版】RichFaces中使用datatable和datascroller进行分页(使用数据库分页,改良版)(含源码)(JSF 1.2,RichFaces 3.2.1GA)

發布時間:2025/3/21 javascript 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【第二版】RichFaces中使用datatable和datascroller进行分页(使用数据库分页,改良版)(含源码)(JSF 1.2,RichFaces 3.2.1GA) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前第一版有個問題,就是如果進行了刪除等操作并立即返回列表頁,被刪除的項還在那,但其實數據庫已經被刪除了,需要做一個刷新列表操作才可以,本版就是修正此問題的。
如果要修正此問題,就需要將分頁的擴展代碼也就是第一版中TestBean中的代碼放入業務相關管理Bean中。

頁面代碼(其中testBean已經變成業務Managed-bean user了):

????<f:view>
????????
<h:form?id="formlist">????
????????????
<rich:dataTable?id="carList"?width="483"?columnClasses="col"?rows="#{user.pageSize}"
????????????????value
="#{user.dataModel}"?var="car">????????????
????????????????
<f:facet?name="header">
????????????????????
<rich:columnGroup>
????????????????????????
<h:column>
????????????????????????????
<h:outputText?styleClass="headerText"?value="Name"?/>
????????????????????????
</h:column>
????????????????????????
<h:column>
????????????????????????????
<h:outputText?styleClass="headerText"?value="Decription"?/>
????????????????????????
</h:column>
????????????????????????
<h:column>
????????????????????????????
<h:outputText?styleClass="headerText"?value="Base?Price"?/>
????????????????????????
</h:column>
????????????????????????
<h:column>
????????????????????????????
<h:outputText?styleClass="headerText"?value="Time"?/>
????????????????????????
</h:column>
????????????????????????
<h:column>
????????????????????????????
<h:outputText?styleClass="headerText"?value="操作"?/>
????????????????????????
</h:column>????????????????????????
????????????????????
</rich:columnGroup>
????????????????
</f:facet>
????
????????????????
<h:column>
????????????????????
<h:outputText?value="#{car.name}"?/>
????????????????
</h:column>
????????????????
<h:column>
????????????????????
<h:outputText?value="#{car.description}"?/>
????????????????
</h:column>
????????????????
<h:column>
????????????????????
<h:outputText?value="#{car.baseprice}"?/>
????????????????
</h:column>
????????????????
<h:column>
????????????????????
<h:outputText?value="#{car.timestamp}"?/>
????????????????
</h:column>
????????????????
<h:column>
????????????????????
<h:commandLink?action="#{user.delete}"?value="刪除"?>
????????????????????????
<f:param?name="id"?value="#{car.id}"/>
????????????????????
</h:commandLink>
????????????????
</h:column>????????????????
????????????
</rich:dataTable>
????????????
<rich:datascroller?for="carList"?id="dc1"
????????????style
="width:483px"?page="#{user.scrollerPage}"/>????????????????????????
????????
</h:form>
????
</f:view>


DataPage.java(沒有變化):

import?java.util.List;

public?class?DataPage
{

????
/**
?????*?將需要的頁的數據封裝到一個DataPage中去,?這個類表示了我們需要的一頁的數據,<br>
?????*?里面包含有三個元素:datasetSize,startRow,和一個用于表示具體數據的List。<br>
?????*?datasetSize表示了這個記錄集的總條數,查詢數據的時候,使用同樣的條件取count即可,<br>
?????*?startRow表示該頁的起始行在數據庫中所有記錄集中的位置
?????
*/


????
private?int?datasetSize;

????
private?int?startRow;

????
private?List?data;

????
/**
?????*?
?????*?
@param?datasetSize
?????*????????????數據集大小
?????*?
@param?startRow
?????*????????????起始行
?????*?
@param?data
?????*????????????數據list
?????
*/

????
public?DataPage(int?datasetSize,?int?startRow,?List?data)
????
{

????????
this.datasetSize?=?datasetSize;

????????
this.startRow?=?startRow;

????????
this.data?=?data;

????}


????
/**
?????*?
?????*?
@return
?????
*/

????
public?int?getDatasetSize()
????
{

????????
return?datasetSize;

????}


????
public?int?getStartRow()
????
{

????????
return?startRow;

????}


????
/**
?????*?
?????*?
@return?已填充好的數據集
?????
*/

????
public?List?getData()
????
{

????????
return?data;

????}


}


PagedListDataModel.java(添加了一些注釋):


import?java.util.List;

import?javax.faces.model.DataModel;

/**
?*?
?*?TODO?分頁所使用的類

?*?
@author?<a?href="mailto:tianlu@jsecode.com">TianLu</a>
?*?
@version?$Rev$?<br>
?*??????????$Id$
?
*/

/*?使用方法:
?*?前臺的功能模塊Bean(例如User)中加入類似下面的代碼,可根據您的需要進行相應修改
?*?private?PagedListDataModel?dataModel;
????private?int?pageSize?=?10;
????public?int?getPageSize()
????{
????????return?pageSize;
????}

????public?PagedListDataModel?getDataModel()
????{
????????
????????if?(?dataModel?==?null?)?{
????????????dataModel?=?new?PagedListDataModel(pageSize)
????????????{
????????????????//查詢分頁函數
????????????????public?DataPage?fetchPage(int?startRow,?int?pageSize)
????????????????{
????????????????????//?call?enclosing?managed?bean?method?to?fetch?the?data
????????????????????CarBeanDAO?dao?=?new?CarBeanDAO();
????????????????????String?sql?=?"from?CarBean?model?order?by?model.id?desc";????????????????
????????????????????Query?query?=?EntityManagerHelper.createQuery(sql);????????????????????
????????????????????query.setFirstResult(startRow);????????????????????
????????????????????query.setMaxResults(pageSize);????????????????????
????????????????????List?list?=?query.getResultList();
????????????????????System.out.println("current?row?count?=?"?+?list.size());
????????????????????Query?q?=?EntityManagerHelper.createQuery("select?count(*)?from?CarBean");
????????????????????return?new?DataPage(Integer.parseInt(q.getSingleResult().toString()),?startRow,?list);????????????????????
????????????????}
????????????};
????????}
????????
????????return?dataModel;
????}
*/


/*?前臺控件像這樣使用
?*?<rich:dataTable?id="carList"?width="483"?columnClasses="col"?rows="#{user.pageSize}"
????value="#{user.dataModel}"?var="car">????????????
????<f:facet?name="header">
????????<rich:columnGroup>
????????????<h:column>
????????????????<h:outputText?styleClass="headerText"?value="Name"?/>
????????????</h:column>
????????????<h:column>
????????????????<h:outputText?styleClass="headerText"?value="Decription"?/>
????????????</h:column>
????????????<h:column>
????????????????<h:outputText?styleClass="headerText"?value="Base?Price"?/>
????????????</h:column>
????????????<h:column>
????????????????<h:outputText?styleClass="headerText"?value="Time"?/>
????????????</h:column>
????????????<h:column>
????????????????<h:outputText?styleClass="headerText"?value="操作"?/>
????????????</h:column>????????????????????????
????????</rich:columnGroup>
????</f:facet>

????<h:column>
????????<h:outputText?value="#{car.name}"?/>
????</h:column>
????<h:column>
????????<h:outputText?value="#{car.description}"?/>
????</h:column>
????<h:column>
????????<h:outputText?value="#{car.baseprice}"?/>
????</h:column>
????<h:column>
????????<h:outputText?value="#{car.timestamp}"?/>
????</h:column>
????<h:column>
????????<h:commandLink?action="#{user.delete}"?value="刪除"?>
????????????<f:param?name="id"?value="#{car.id}"/>
????????</h:commandLink>
????</h:column>????????????????
</rich:dataTable>
<rich:datascroller?for="carList"?id="dc1"
style="width:483px"?page="#{user.scrollerPage}"/>
*/


/*
?*?進行刪除等操作后會立即改變列表項并且返回列表頁的,請調用本類的refresh方法刷新當前頁面
?*?使用方法:
?*?????????????dao.delete(bean);
?*????????????dataModel.refresh();
?
*/

public?abstract?class?PagedListDataModel?extends?DataModel?{
????
int?pageSize;
????
int?rowIndex;
????DataPage?page;

????
/**
?????*?Create?a?datamodel?that?pages?through?the?data?showing?the?specified
?????*?number?of?rows?on?each?page.
?????
*/

????
public?PagedListDataModel(int?pageSize)?{
????????
super();
????????
this.pageSize?=?pageSize;
????????
this.rowIndex?=?-1;
????????
this.page?=?null;
????}


????
/**
?????*?Not?used?in?this?class;?data?is?fetched?via?a?callback?to?the?fetchData
?????*?method?rather?than?by?explicitly?assigning?a?list.
?????
*/

????
public?void?setWrappedData(Object?o)?{
????????
if?(o?instanceof?DataPage)?{
????????????
this.page?=?(DataPage)?o;
????????}
?else?{
????????????
throw?new?UnsupportedOperationException("?setWrappedData?");
????????}

????}


????
public?int?getRowIndex()?{
????????
return?rowIndex;
????}


????
/**
?????*?Specify?what?the?"current?row"?within?the?dataset?is.?Note?that?the
?????*?UIData?component?will?repeatedly?call?this?method?followed?by?getRowData
?????*?to?obtain?the?objects?to?render?in?the?table.
?????
*/

????
public?void?setRowIndex(int?index)?{
????????rowIndex?
=?index;
????}


????
/**
?????*?Return?the?total?number?of?rows?of?data?available?(not?just?the?number?of
?????*?rows?in?the?current?page!).
?????
*/

????
public?int?getRowCount()?{
????????
return?getPage().getDatasetSize();
????}


????
/**
?????*?Return?a?DataPage?object;?if?one?is?not?currently?available?then?fetch
?????*?one.?Note?that?this?doesn't?ensure?that?the?datapage?returned?includes
?????*?the?current?rowIndex?row;?see?getRowData.
?????
*/

????
private?DataPage?getPage()?{
????????
if?(page?!=?null)?{
????????????
return?page;
????????}

????????
int?rowIndex?=?getRowIndex();
????????
int?startRow?=?rowIndex;
????????
if?(rowIndex?==?-1)?{
????????????
//?even?when?no?row?is?selected,?we?still?need?a?page
????????????
//?object?so?that?we?know?the?amount?of?data?available.
????????????startRow?=?0;
????????}
?//?invoke?method?on?enclosing?class
????????page?=?fetchPage(startRow,?pageSize);
????????
return?page;
????}


????
/**
?????*?Return?the?object?corresponding?to?the?current?rowIndex.?If?the?DataPage
?????*?object?currently?cached?doesn't?include?that?index?then?fetchPage?is
?????*?called?to?retrieve?the?appropriate?page.
?????
*/

????
public?Object?getRowData()?{
????????
if?(rowIndex?<?0)?{
????????????
throw?new?IllegalArgumentException(
????????????????????
"?Invalid?rowIndex?for?PagedListDataModel;?not?within?page?");
????????}
?//?ensure?page?exists;?if?rowIndex?is?beyond?dataset?size,?then
????????
//?we?should?still?get?back?a?DataPage?object?with?the?dataset?size
????????
//?in?it
????????if?(page?==?null)?{
????????????page?
=?fetchPage(rowIndex,?pageSize);
????????}

????????
int?datasetSize?=?page.getDatasetSize();
????????
int?startRow?=?page.getStartRow();
????????
int?nRows?=?page.getData().size();
????????
int?endRow?=?startRow?+?nRows;
????????
if?(rowIndex?>=?datasetSize)?{
????????????
throw?new?IllegalArgumentException("?Invalid?rowIndex?");
????????}

????????
if?(rowIndex?<?startRow)?{
????????????page?
=?fetchPage(rowIndex,?pageSize);
????????????startRow?
=?page.getStartRow();
????????}
?else?if?(rowIndex?>=?endRow)?{
????????????page?
=?fetchPage(rowIndex,?pageSize);
????????????startRow?
=?page.getStartRow();
????????}

????????
return?page.getData().get(rowIndex?-?startRow);
????}


????
public?Object?getWrappedData()?{
????????
return?page.getData();
????}


????
/**
?????*?Return?true?if?the?rowIndex?value?is?currently?set?to?a?value?that
?????*?matches?some?element?in?the?dataset.?Note?that?it?may?match?a?row?that?is
?????*?not?in?the?currently?cached?DataPage;?if?so?then?when?getRowData?is
?????*?called?the?required?DataPage?will?be?fetched?by?calling?fetchData.
?????
*/

????
public

總結

以上是生活随笔為你收集整理的【第二版】RichFaces中使用datatable和datascroller进行分页(使用数据库分页,改良版)(含源码)(JSF 1.2,RichFaces 3.2.1GA)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 香蕉影音| 久久综合一区二区 | 国产精品视频一二三 | 免费在线观看毛片视频 | 久久精品美女 | 国产精品区一区二区三 | 精品视频在线看 | 和黑帮大佬的365 | 91伦理在线| 91精品婷婷国产综合久久 | 99热黄色 | 午夜激情视频在线 | 久久久久久久久久久久久久久久久久久久 | 色综合欧美 | 一区二区在线播放视频 | 美女四肢被绑在床扒衣 | 国产野外作爱视频播放 | 日韩在线播放视频 | 琪琪色av| 国产三级三级三级三级三级 | 天天干夜夜操视频 | 亚洲 小说区 图片区 | 国产精品精品国产色婷婷 | ⅹxxxxhd亚洲日本hd老师 | 黑巨茎大战欧美白妞 | 国产精品91在线观看 | 国产精品视频你懂的 | 免费av网站大全 | 日韩在线视频免费看 | 日韩在线一二三区 | 老熟女高潮一区二区三区 | 手机av观看| 久久人体 | 吸咬奶头狂揉60分钟视频 | 久久艹伊人 | 欧美精品亚洲 | 一区在线视频 | 欧美性猛交99久久久久99按摩 | 一级黄色片欧美 | 久久亚洲高清 | 天天色天天色 | 波多野结衣三区 | 国产成人一区二区三区免费看 | 男男play呻吟动漫网站 | 亚洲视频在线观看免费 | 嫩草一区二区 | 天天综合久久 | 免费天堂av | 精品国产午夜福利 | 久久逼逼 | 国产一级免费 | 精品九一| 天天爽天天爽 | 翔田千里88av中文字幕 | 黄色网址中文字幕 | 欧美图片一区二区 | 伊人久久激情 | 国内久久精品 | 91av视频在线播放 | 亚洲精品成人久久 | 日批网站在线观看 | 伊人久久中文 | 99国产精品99久久久久久 | 99re久久精品国产 | 国产一区二区三区在线免费 | 国产一区视频网站 | 丰满人妻一区二区三区53视频 | 日韩黄网站 | 一级片大全| 日韩在线播放中文字幕 | 欧美熟妇乱码在线一区 | 99精品欧美一区二区三区综合在线 | 成人在线免费观看网址 | 亚洲国产精品成人综合在线 | 成a人片亚洲日本久久 | 免费观看日本 | 亚洲三区视频 | 99精品中文字幕 | 日韩中文字幕综合 | 口舌奴vk | 狠狠操夜夜操 | 韩国视频一区二区三区 | 激情成人综合 | 九九九热视频 | 日韩高清免费av | 国产男女精品 | 一二三区在线播放 | 国产精品大屁股白浆一区 | 亚洲激情网址 | 老司机午夜性大片 | 午夜激情福利电影 | 亚州国产精品视频 | 爱情岛论坛成人 | 亚洲国产精一区二区三区性色 | av网站在线免费播放 | 精品1区2区3区| 我把护士日出水了视频90分钟 | 男女黄色网| 四川丰满妇女毛片四川话 |