omn​​ifaces是否有与分页相关的组件?

时间:2012-07-26 16:28:36

标签: jsf pagination omnifaces

我在omnifaces的展示中搜索了没有成功的任何有助于JSF(数据表)真实分页的组件。

你们知道有没有吗?

这将是一个很棒的功能。

我在这里采取了一些方法http://www.ninthavenue.com.au/blog/paging-large-data-sets-with-a-lazylist并附带下面的代码。

它非常通用,可以与任何JSF组件库或持久性API一起使用。

开发人员必须在他的JSF托管bean(支持bean)中实现惰性列表,该托管bean可以访问业务外观或实体管理器来执行查询。

import java.util.AbstractList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public abstract class AbstractLazyList extends AbstractList {

/**
 * Current page cache.
 */
private final Map<Integer, Object> currentPage = new HashMap<Integer, Object>();

/**
 * Page size. Default 50.
 */
private int pageSize = 50;

public void setPageSize(int pageSize) {
    this.pageSize = pageSize;
}

@Override
public Object get(int index) {
    if (currentPage.containsKey(index)) {
        return currentPage.get(index);
    }

    queryNewPage(index);

    return currentPage.get(index);
}

/**
 * Clears cache and queries new page's itens.
 * 
 * @param firstItemIndex
 *            first item index
 */
private void queryNewPage(int firstItemIndex) {
    currentPage.clear();
    final List<Object> pageResults = queryNextPage(firstItemIndex, pageSize);
    for (int j = 0; j < pageResults.size(); j++) {
        currentPage.put(firstItemIndex + j, pageResults.get(j));
    }
}

@Override
public int size() {
    return queryResultsSize();
}

/**
 * Queries next page itens.
 * 
 * @param firstRowIndex
 *            first row index
 * @param pageSize
 *            maximum resuts of the query
 * @return list of results
 */
protected abstract List<Object> queryNextPage(int firstRowIndex,
        int pageSize);

/**
 * Counts the total results of the query.
 * 
 * @return query's total results
 */
protected abstract int queryResultsSize();
}
}

也许像这样的方法可以适用于omnifaces。

1 个答案:

答案 0 :(得分:2)

OmniFaces不适合面向视觉的UI组件,更多的是面向“幕后”工作的实用程序,并且可以与任何其他JSF组件库结合使用。

考虑使用面向视觉的UI组件库,例如PrimeFaces和RichFaces。它们提供了具有分页可能性的数据表组件。