日韩性视频-久久久蜜桃-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)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 波多野结衣免费视频观看 | 日本一区二区免费在线 | 国内自拍在线 | 9人人澡人人爽人人精品 | 波多野结衣先锋影音 | 久久久噜噜噜久久久 | 国产剧情av在线播放 | 波多一区 | 在线观看一二三区 | 日韩电影一区二区 | 大陆av在线| 亚洲视频国产视频 | 免费成年人视频在线观看 | 日本三级播放 | 人妻av无码一区二区三区 | 国产欧美日韩中文字幕 | 男女猛烈无遮挡免费视频 | 深夜视频一区二区三区 | 五个女闺蜜把我玩到尿失禁 | 欧美性久久久久 | 国产精品美女网站 | 在线观看免费看片 | 国产第一页在线播放 | 无码成人一区二区 | 国产黄免费 | 欧美综合激情 | 欧美xxxxx高潮喷水麻豆 | 欧美日韩在线国产 | 欧美日韩成人一区二区在线观看 | 综合天天| 久久亚洲精| 国产精品日韩精品欧美精品 | 草色噜噜噜av在线观看香蕉 | 亚洲精品网站在线观看 | 久久福利影视 | 国产传媒一级片 | 成人羞羞在线观看网站 | 色av一区 | 日日噜噜噜噜人人爽亚洲精品 | 成人性生交视频免费观看 | 嫩草视频在线观看免费 | 黄色av一区二区 | 国产色综合视频 | 久久精品国产一区二区三区 | 在线观看免费 | 一级做a爱 | 黄瓜污视频 | 欧美日批视频 | 国产a网| 91福利一区二区 | 四虎成人影视 | jizjiz中国少妇高潮水多 | 日本高清不卡在线观看 | aa片在线观看视频在线播放 | 涩涩视频在线观看免费 | 无码一区二区 | 成人性生生活性生交全黄 | 69精品国产 | 亚洲欧洲日韩国产 | 日韩综合另类 | 91久久综合亚洲鲁鲁五月天 | 成人久久精品人妻一区二区三区 | 亚洲激情a | 爱爱视频网址 | 日本欧美一区二区三区不卡视频 | 精品人妻码一区二区三区红楼视频 | 屁屁影院一区二区三区 | 91看片黄 | 男女一级特黄 | 玩弄少妇人妻 | 久久久久久少妇 | 草草影院第一页yycc.com | 制服丝袜成人动漫 | 国产精品人人妻人人爽人人牛 | 黄色一级免费 | 欧美一区二区黄色 | 欧美人妻精品一区二区 | 九九爱精品 | 成片在线观看 | 亚洲视频一区二区三区 | 色妻影院 | 国产精品一区二区三区四 | 国产suv精品一区二区四 | jzz在线观看 | 操大逼网站 | 中文字幕首页 | 亚洲精品成人网 | 国产福利视频一区二区三区 | av在线中文 | 久久超碰精品 | 人人澡澡人人 | 亚洲一区二区精品视频 | 久久亚洲一区二区三区四区五区 | 人人夜| 国模少妇一区二区三区 | 东京干手机福利视频 | 婷婷丁香社区 | 国产喷潮 | 国产精品91一区二区 |