- 浏览: 77995 次
- 性别:
- 来自: 广州
文章分类
最新评论
一般来说,基于rich:datascroller和rich:dataTable进行配合,马上就实现了表格及分页,但这种分布是一种“伪分页”,即:只是表现层分页,在数据层并没有进行分页查询。
下面给出一个我在使用的支持数据层分布查询的方法:
基类:
public abstract class BaseExtendedDataModel<T, ID extends Serializable> extends ExtendedDataModel { @Logger private Log log; public List<T> listRow = null; private int firstRow_old = 0; private ID currentId; private Map<ID, T> wrappedData = new HashMap<ID, T>(); private Long rowCount; // better to buffer row count locally public abstract Long getCount(); public abstract List<T> getList(Integer firstRow, Integer maxResults); public abstract T findById(ID id); public void wrap(FacesContext context, DataVisitor visitor, Range range, Object argument, List<T> list) throws IOException { wrappedData = new HashMap<ID, T>(); for (T row : list) { ID id = null; try { id = (ID) PropertyUtils.getProperty(row, "id"); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } // wrappedKeys.add(id); wrappedData.put(id, row); visitor.process(context, id, argument); } } public boolean hasById(ID id) { return wrappedData.get(id) != null; } @Override public void walk(FacesContext context, DataVisitor visitor, Range range, Object argument) throws IOException { int firstRow = ((SequenceRange) range).getFirstRow(); int maxResults = ((SequenceRange) range).getRows(); if (firstRow != firstRow_old || listRow == null){ listRow = getList(firstRow, maxResults); firstRow_old = firstRow; } wrap(context, visitor, range, argument, listRow); } /* * This method normally called by Visitor before request Data Row. */ @Override public void setRowKey(Object key) { this.currentId = (ID) key; } @Override public int getRowCount() { if (rowCount == null) return (rowCount = this.getCount()).intValue(); else return rowCount.intValue(); } @Override public boolean isRowAvailable() { if (currentId == null) { return false; } else { return hasById(currentId); } } /** * This is main way to obtain data row. It is intensively used by framework. We strongly recommend use of local cache in that method. */ @Override public Object getRowData() { if (currentId == null) { return null; } else { T ret = wrappedData.get(currentId); if (ret == null) { ret = this.findById(currentId); wrappedData.put(currentId, ret); return ret; } else { return ret; } } } /** * Unused rudiment from old JSF staff. */ @Override public Object getWrappedData() { throw new UnsupportedOperationException(); } private int rowIndex = 0; @Override public int getRowIndex() { //throw new UnsupportedOperationException(); return rowIndex; } @Override public void setRowIndex(int rowIndex) { //throw new UnsupportedOperationException(); this.rowIndex = rowIndex; } @Override public void setWrappedData(Object data) { throw new UnsupportedOperationException(); } @Override public Object getRowKey() { if (true) throw new UnsupportedOperationException(); return currentId; } }
数据列表类
public class PeopleListExtendedDataModel extends BaseExtendedDataModel<People, Long>{ ... @Override public People findById(Long id) { return entityManager.find(People.class, id); } @Override public Long getCount() { return (Long)createQuery(true).getSingleResult(); } @Override public List<People> getList(Integer firstRow, Integer maxResults) { return createQuery(false).setFirstResult(firstRow).setMaxResults(maxResults).getResultList(); } ... }
页面代码:
<rich:datascroller align="left" for="peopleList" maxPages="20" rendered="#{peopleListExtendedDataModel.size>20}"/> <rich:dataTable width="100%" id="peopleList" rows="20" columnClasses="col" value="#{peopleListExtendedDataModel}" var="people">
发表评论
-
HTTPClient
2012-12-21 21:11 0public class RenRen { // The ... -
Export To Excel - Testing
2012-12-18 13:15 0MainTest ..... Map configM ... -
Export To Excel - ExcelUtils.java [Version 0.2]
2012-12-18 13:11 9import java.io.BufferedReader; ... -
Export To Excel - Action Oupt Excel
2012-11-23 13:49 10public String doAction(Work ... -
Export To Excel - ExcelUtils.java
2012-12-17 16:31 3import java.io.BufferedReader; ... -
Export To Excel - ExcelDAO.java
2012-12-18 12:55 5import java.sql.CallableStateme ... -
Export To Excel - commonExcelStyle.css
2012-12-18 12:55 6body { FONT-FAMILY: "Ari ... -
Export To Excel - ExcelConstants.java
2012-12-18 12:55 5/** * <p><b> * ... -
Export To Excel - ExcelRowList.java
2012-12-18 09:55 5import java.util.ArrayList; im ... -
Export To Excel - ExcelRowItem.java
2012-12-17 16:32 7import java.util.ArrayList; im ... -
Export To Excel - ExcelInfo.java
2012-11-23 13:50 8/** * <p><b> * ... -
Export To Excel - ExcelColList.java
2012-11-23 13:50 6import java.util.ArrayList; im ... -
Export To Excel - ExcelColItem.java
2012-11-23 13:50 11Version 0.1 import java.uti ... -
Export To Excel - ExcelCellItem.java
2012-11-23 13:49 7public class ExcelCellItem { ... -
Util
2012-12-17 16:32 676import java.io.BufferedReader; ... -
DMSUtil
2012-12-17 16:31 707import java.io.ByteArrayInputSt ... -
PooledConnectionManager
2012-12-17 16:31 926import java.sql.Connection; im ... -
FloatValidator
2012-10-05 13:42 772public class FloatValidator ext ... -
XmlHelper
2012-08-31 09:33 1268import java.io.ByteArrayInputSt ... -
XMLEncode
2012-08-30 18:43 1054public class XMLEncode implemen ...
相关推荐
3. **配置JSF页面**:在JSF页面中,使用`rich:datascroller`和`rich:extendedDataTable`组合实现分页。`rich:datascroller`将负责导航,而`rich:extendedDataTable`则展示数据。 ```xml <rich:extendedDataTable ...
通过使用RichFaces的`rich:dataTable`和`rich:datascroller`组件,我们可以轻松地在Web应用中实现数据的展示和分页功能。同时,结合后端的`DataPage`和`PagedListDataModel`类,可以更高效地处理大量数据,提升应用...
RichFaces的`<rich:dataTable>`和`<rich:extendedDataTable>`组件提供了强大的数据展示功能,支持分页、排序、过滤等操作。配合`<rich:datascroller>`可以实现数据的动态加载。 6. **国际化与本地化**: ...
比如,我们可以在相册列表页面使用`<rich:datascroller>`组件实现分页加载,使用`<rich:fileUpload>`组件让用户无需刷新页面即可上传图片,使用`<rich:modalPanel>`展示预览图片的弹窗。 在视图层,我们需要创建JSF...
许多开源库提供了现成的JSF分页组件,如PrimeFaces的`p:paginator`和RichFaces的`rich:datascroller`。这些组件通常提供了丰富的功能和自定义选项,简化了开发过程。 ### 3. 分页组件的核心功能 - **页码控制**:...
它不仅具有基本的表格功能,如排序、分页和筛选,还支持日期选择器和其他与日期相关的交互。DateTable可以很好地整合到JSF应用程序中,通过AJAX更新和丰富的用户界面,提高用户体验。 1. **DateTable的基本使用** ...
- **<rich:datascroller>**:用于数据表格的分页,提供多种滚动样式和行为。 - **<rich:datagrid>**:一个动态的数据网格,可以展示大量数据,并支持排序、过滤和行操作。 - **<rich:tree>**:创建可扩展的树形...
3. **强大的数据呈现**:`<rich:dataTable>`和`<rich:extendedDataTable>`组件提供了强大的数据展示功能,支持排序、分页和过滤,适用于大数据集的显示。 4. **自定义和扩展**:尽管RichFaces提供了很多现成组件,...
1. **设计页面布局:** 使用`rich:dataTable`来展示产品列表,该组件支持分页、排序等功能。 2. **添加AJAX支持:** 通过在`rich:dataTable`内嵌入`<a4j:commandLink>`或`<a4j:commandButton>`来实现单击时的异步...
在提供的文件中,`TableDataSource-Binding-DataTable-to-Rich-Data-Con.pdf`可能详细介绍了这个过程,而`Codeproject.zip`和`Codeproject2.zip`可能包含了示例代码和项目文件。通过查看这些资源,你可以更深入地...
在商品管理系统中,我们可以使用RichFaces的`<rich:dataTable>`来优雅地呈现商品列表,通过AJAX更新实现无刷新加载或编辑商品信息。例如,使用`<a4j:ajax>`事件监听器可以实现只更新特定区域的页面内容,提高响应...
对于数据量较大的表格,可能需要使用如Bootstrap的DataTable插件或自定义的JavaScript解决方案来实现表格的分页、排序和过滤功能。这些工具通常也支持动态调整表格布局。 8. **无障碍性考虑**: 在实现左右表格互...
Silverlight是微软推出的一种RIA(Rich Internet Application)技术,它提供了一种创建具有丰富媒体体验和交互式用户界面的Web应用程序的方式。通过XAML(Extensible Application Markup Language)和C#、VB.NET等...
例如,`p:datatable`组件允许你展示和操作表格数据,你可以通过调整列宽、排序、过滤和分页来定制其行为。 此外,指南还会介绍PrimeFaces的Ajax功能,如Partial Page Rendering(PPR)和PrimeFaces Push技术。PPR...
Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...
16.3 使用ObjectDataSource控件分页、排序和过滤数据 515 16.3.1 用户界面分页 515 16.3.2 数据源分页 517 16.3.3 用户界面排序 522 16.3.4 数据源排序 523 16.3.5 过滤数据 527 16.4 处理ObjectDataSource控件的...