这篇文章摘译自IceFaces官方的blog,文章中提到的LazyDataModel也适用于其它的JSF组件库中的Table组件。原文地址:http://blog.icefaces.org/blojsom/blog/default/2008/11/05/Lazy-Loading-a-JSF-DataModel-for-an-ICEfaces-ice-dataTable/
数据迭代组件,比如 ICEfaces ice:dataTable
,一般有两个属性——value和var。value是要显示的数据集,一般绑定到managed-bean的属性上,var表示迭代过程中的当前行的变量,可以通过EL表达式访问:
<ice:dataTable value="#{modelBean.rows}" var="row">
<ice:column>
<f:facet name="header">
<ice:outputText value="#{msgs.firstName}" />
</f:facet>
<ice:outputText value=#{row.firstName}" />
</ice:column>
...
</ice:dataTable>
value绑定到 ModelBean.getRows()这个方法,这个方法可以返回多种类型的值,不过通常返回的是java.util.List类型:
public List<Row> getRows() {...}
其实在底层value属性绑定的是一个JSF DataModel
类型的对象,如果value绑定的不是一个DataModel类型的值那么JSF会包装一个合适的DataModel,比如 ListDataModel
给value值。
通常这个model bean会保存在session scope中或者icefaces的extended-request scope(译注:相当于JSF2.0的view scope)中,如果你要显示的数据只有10到20行,那么没什么问题。但如果有1,000,000行数据呢?这样会带来很大的性能问题,尤其大部分情况下用户只是一次浏览10-20行数据。
不幸的是JSF规范没有提供一种按需加载数据的有效方式(也就是常说的“延迟加载”),我看过好些关于这个问题的文章,不过我觉的实现一种和持久层无关的解决方案会更好些。
我写了一个 LazyDataModel.java
,你可以继承它并实现下面三个方法来实现延迟加载:
public abstract int getRowsPerPage();
public abstract int countRows();
public abstract List<DTO> findRows(int startRow, int finishRow);
BTW,结合使用 ICEfaces ice:dataPaginator
组件可以为用户提供更好的体验。
分享到:
相关推荐
icefaces 资源
官网的icefaces 的API 学习icefaces入门者必备
安装完ICEFaces Eclipse 插件后发现少了很多包,在建立icefaces工程的时候,往往需要到网上下载lib。所以本人在这里共享以下ICEFaces1.8的官方包。用意是省得大家在eclipse建立工程的时候专门去Icefaces官方网去下载...
ICEfaces 1.8 .pdf,详细介绍JSF的一个优秀的框架的知识
根据以往做过的ICEface的经验, 初次尝试了ICEFaces 2.0Beta. 极力推荐这个便捷的AJAX框架.开发工具是Intellij Idea 9.0.3. 废话少说,各自体验吧.
官网 http://www.icefaces.org DOWN下来的PDF.
icefaces1.8 for netbeans6.7beta
ICEfaces-1.8.1-Eclipse-3.4.2-plugins.zip
ICEfaces 2 for eclipse是基于JSF V2标准的组件系统并且无缝集成在ECLIPSE环境中。它提供了100多个web组件,插件安装配置容易
IceFaces安装auctionMonitor示例
官网API,英文版 绝对可用官网API,英文版 绝对可用
开发IceFacesJSF必备.这是官方的开发文档,有各种组件的介绍。不久WoodStock就要完全一直到IceFaces了!
JSF+ICEFaces 做的一个小登陆,大家凑合着看看,小弟初学乍练,有什么不好的大家包涵包涵。
spring icefaces hibernate 整合,主要是web.xml文件的listener的配置和faces-config.xml里相关spring的配置
ICEFaces :autocomplete-tutorial.zip this code show how to use icefaces autocomplete!
hibernate 和icefaces的使用
icefaces1_6_0.chm
Icefaces 1.8 Next Generation Enterprise Web Development
ICEFaces的使用,包括JSF的简单实例和ICEFces的实例
icefaces1_6_0 component.chm