一、方案一
1.使用MyFaces的扩展组件Tomahawk 1.1.9的<t:dataTable>和<t:dataScroller>标签
2.例子
<h:form prependId="false">
<t:panelGrid>
<t:saveState value="#{viewCustomerInfo.customerInfos}"/>
<t:dataTable id="paginator" value="#{viewCustomerInfo.customerInfos}" var="info" preserveDataModel="false" rows="3" styleClass="tb1" width="100%" border="0" cellspacing="0" cellpadding="0">
<h:column>
<f:facet name="header"><h:outputText value="code"/></f:facet>
<h:outputText value="#{info.customerCode}"/>
</h:column>
<h:column>
<f:facet name="header"><h:outputText value="name"/></f:facet>
<h:outputText value="#{info.customerName}"/>
</h:column>
</t:dataTable>
<t:dataScroller id="scroller" paginator="true" paginatorMaxPages="9" fastStep="5" paginatorActiveColumnStyle="font-weight:bold;" for="paginator" immediate="true">
<f:facet name="first">
<t:graphicImage url="../img/page/first.jpg" border="1" width="20px" height="18px"/>
</f:facet>
<f:facet name="fastrewind">
<t:graphicImage url="../img/page/rewind.jpg" border="1" width="20px" height="18px"/>
</f:facet>
<f:facet name="previous">
<t:graphicImage url="../img/page/previous.jpg" border="1" width="20px" height="18px"/>
</f:facet>
<f:facet name="next">
<t:graphicImage url="../img/page/next.jpg" border="1" width="20px" height="18px"/>
</f:facet>
<f:facet name="fastforward">
<t:graphicImage url="../img/page/forward.jpg" border="1" width="20px" height="18px"/>
</f:facet>
<f:facet name="last">
<t:graphicImage url="../img/page/last.jpg" border="1" width="20px" height="18px"/>
</f:facet>
</t:dataScroller>
</t:panelGrid>
</h:form>
3. 说明:
(1)使用一组dataTable和dataScroller标签,其中dataTable必须指定id和rows(当然还有value)
(2)将dataScroller的for属性的值设置为dataTable的id来完成关联(如果将dataScroller嵌套在dataTable的内部则不需要该设定)
(3)dataScroller中的facet标签的name值是固定取值(first,fastrewind,previous,next,fastforward,last来分别表示首页,上N页(其中N为dataScroller的fastStep的属性值,上一页,下一页,下N页,末页))
(4)由于dataTable中的数据是一次性读取(且manage-bean的scope是request),在翻页时数据会丢失,所以要用到<t:saveState>来保存状态,当然,如果manage-beand的scope为session则不会有此问题
(5)此方案的局限性:只适合数据量较小的分页,因为该方案一次行将数据全部取出并保存在内存中,如果数据超过一定的量,则影响性能,方案二解决了该问题
二、方案二
1. 使用MyFaces的扩展组件Tomahawk 1.1.9的<t:dataTable>和<t:dataScroller>标签
2. 对DataModel进行封装,该DataModel仅仅持有了一页的数据DataPage,并在适当的时候加载数据,读取我们需要页的数据。(代码见附件java code.jar)
3. DataModel 是一个抽象类,用于封装各种类型的数据源和数据对象的访问,JSF中dataTable中绑定的数据实际上被包装成了一个DataModel,以消除各种不同数据源和数据类型的复杂性
4. 例子
<h:form prependId="false">
<t:panelGrid>
<%--<t:saveState value="#{viewCustomerInfo.customerInfos}"/>--%>
<t:dataTable id="paginator" value="#{viewCustomerInfo.dataModel}" var="info" preserveDataModel="false" rows="3" styleClass="tb1" width="100%" border="0" cellspacing="0" cellpadding="0">
<h:column>
<f:facet name="header"><h:outputText value="code"/></f:facet>
<h:outputText value="#{info.customerCode}"/>
</h:column>
<h:column>
<f:facet name="header"><h:outputText value="name"/></f:facet>
<h:outputText value="#{info.customerName}"/>
</h:column>
</t:dataTable>
<t:dataScroller id="scroller" paginator="true" paginatorMaxPages="9" fastStep="5" paginatorActiveColumnStyle="font-weight:bold;" for="paginator" immediate="true">
<f:facet name="first">
<t:graphicImage url="../img/page/first.jpg" border="1" width="20px" height="18px"/>
</f:facet>
<f:facet name="fastrewind">
<t:graphicImage url="../img/page/rewind.jpg" border="1" width="20px" height="18px"/>
</f:facet>
<f:facet name="previous">
<t:graphicImage url="../img/page/previous.jpg" border="1" width="20px" height="18px"/>
</f:facet>
<f:facet name="next">
<t:graphicImage url="../img/page/next.jpg" border="1" width="20px" height="18px"/>
</f:facet>
<f:facet name="fastforward">
<t:graphicImage url="../img/page/forward.jpg" border="1" width="20px" height="18px"/>
</f:facet>
<f:facet name="last">
<t:graphicImage url="../img/page/last.jpg" border="1" width="20px" height="18px"/>
</f:facet>
</t:dataScroller>
</t:panelGrid>
</h:form>
5.说明
说明(1)(2)(3)同方案一
(4)因为此方案dataTable的value值是绑定一个dataModel,所以不需要用<t:saveState>来保存状态
(5)需要扩展抽象类javax.faces.model.DataModel,并定义一个DataPage对象来保存每页的记录
(6)所有扩展和自定义的类(见附件)
(7)此方案每次翻页只会取得所需页的数据,结合BaseHibernateService定义的方法,每次翻页返回一个DatePage对象
【参考文章】
1. http://www.blogjava.net/steady/archive/2005/12/30/26013.html
2. http://blog.sina.com.cn/s/blog_602feaa80100gdqu.html
分享到:
相关推荐
在JavaServer Faces (JSF) 应用程序中,分页是提高用户体验和优化性能的重要技术,特别是当处理大量数据时。...在实际项目中,开发者应结合具体需求选择合适的JSF分页解决方案,并充分考虑性能和用户体验。
以PrimeFaces为例,其`p:datascroller`组件是一个强大的分页解决方案。首先,我们需要在JSF页面中引入PrimeFaces库,并在XHTML文件中添加`p:datascroller`组件。这个组件通常与`p:dataTable`配合使用,后者用于显示...
通过分析PageDemo的源代码,我们可以深入学习如何将这些步骤具体实施,从而在自己的项目中复用或改进这个分页方案。 总之,"JSF经典的js分页"是一个关于如何在JSF环境中利用JavaScript实现客户端分页的实例。它强调...
对于标签“源码”和“工具”,可能意味着博客作者深入解析了JSF分页的相关源码,并且提供了一些实用工具或库来简化分页实现。 在阅读这样的博客后,开发者可以更好地理解JSF的分页机制,提升他们在实际项目中的应用...
### JSF中自定义分页呈现器的实现与应用 #### 概述 JavaServer Faces(简称JSF)作为一项强大的Web应用开发框架,为Java开发者...对于那些需要频繁进行分页查询的应用场景而言,这是一个非常实用且高效的解决方案。
在IT行业中,JavaScript Server Faces(JSF)是一种用于构建企业级Web应用的Java框架,而JDBC(Java Database Connectivity)是Java中与数据库交互的标准API,Spring框架则是一个全面的后端开发解决方案,包含了依赖...
然而,该组件存在一些不足之处,例如难以实现特定行样式的自定义显示、回退按钮的风险管理以及数据库分页的优雅解决方案。这些挑战往往会消耗开发者大量的时间和精力。 幸运的是,JSF 1.2 引入了统一的 EL 表达式...
8. **分页和模糊查询**:对于大量的用户数据,可以实现分页显示,通过JSF的`p:paginator`组件配合后端分页逻辑。模糊查询通常涉及SQL的`LIKE`操作,可以在iBatis的映射文件中配置,然后在JSF页面提供搜索框,将输入...
以上这些问题和解决方案都是在实践中积累的经验,对于CDI+JSF2.0项目在WebSphere 8.5环境下的部署和运行至关重要。理解和解决这些问题有助于提高应用的稳定性和用户体验。在实际开发中,应持续关注官方文档、社区...
总之,eXtremeComponents的`xe:pager`标签为Java Web开发者提供了一个简单且强大的分页解决方案。通过合理配置和绑定数据源,我们可以快速实现一个功能完善的分页系统。在实际开发中,可以根据项目需求进行定制,以...
而标签实现的分页可能是指使用自定义标签库,例如Java的JSTL(JavaServer Pages Standard Tag Library)中的`<c:forEach>`或JSF(JavaServer Faces)的UI组件,或者是前端框架如React、Vue或Angular中的自定义组件。...
总结来说,这个文档提供的分页封装方案通过`DataPage`和`PagedListDataModel`实现了对Oracle大数据表的分页处理,使得在JSF应用中可以高效地展示和操作大数据集。同时,需要注意优化查询策略以避免重复查询,提升...
- **分页与Caching**:JSF支持数据的分页显示,同时利用缓存机制提高页面加载速度和性能。 - **定制错误信息**:开发者可以自定义错误信息,提升用户体验,使其更具人性化。 ##### JSF的优越性 JSF最大的优点在于...
因此,文档提出了一种解决方案——在JSF框架中实现数据表控件的分页功能,以此减少服务器端资源消耗和网络传输数据量,提高客户端响应速度。 #### 三、JSF框架简介 ##### 1. JSF框架特点 - **组件为中心的UI构建*...
**JasperReports JSF Plugin** 是一个开源项目,专门设计用于增强JavaServer Faces(JSF)应用程序的功能。...如果你正在寻找一个强大的报表解决方案,JasperReports JSF Plugin无疑是一个值得考虑的选项。
Tomhawk 1.1.6提供了强大的分页解决方案,允许开发者自定义每页显示的记录数,以及轻松实现前后页切换。此外,它还支持动态加载数据,减少了页面加载时间,提高了用户体验。 3. **自定义组件** Tomhawk不仅仅局限...
在Seam框架下,DataTable是一个常用的数据展示组件,它可以展示大量数据并支持各种交互操作,如排序、分页和选择。本文将深入探讨一个基于Seam的DataTable全选解决方案,以帮助开发者更高效地处理用户选择数据的需求...
**标题解析:**"pager-taglib-2.0.rar" 这个文件名...通过以上的分析和解释,我们可以了解到pager-taglib是一个强大且灵活的分页解决方案,无论是在已有框架的项目中还是独立使用,都能提供高效且易于实现的分页功能。
总的来说,pager-taglib-ra2.0是一个专为J2EE应用设计的分页解决方案,提供了一套便捷的标签接口,简化了开发者在处理大量数据时的前端分页工作。通过阅读尼克技术博客的文章,开发者可以更深入地了解如何在实际项目...