如何动态更改adf分页表的范围

时间:2017-02-28 12:44:27

标签: oracle-adf

我有一个adf表,其滚动策略为" page"。每页有25行。我需要动态地转到1到5之间的任何页面。如何在adf中做到这一点。我原来的要求是按一下按钮点击第一页。

1 个答案:

答案 0 :(得分:0)

我没有时间构建测试页来验证这是否有效,但我会在我的ViewObjectImpl课程中添加这样的方法(见下文)。

它基本上计算了你要跳转到的行号,然后它找到该位置的行并使其成为当前行并将其置于当前范围的顶部。

/**
 * Navigates the ViewObject to the top of the specified page
 * @param pageNumber a 1-based page number to navigate to
 */
public void setPage(int pageNumber) {
    final int ROWS_PER_PAGE = 25;
    // rows in range are zero-based, so page 1 is rows 0..24, page 2 is rows 25..49, etc.
    int rowNumberForTopOfPage = (pageNumber-1) * ROWS_PER_PAGE;
    Row rowAtTopOfPage = null;
    // Iterate through the rows to find the row at the top of the desired page
    RowSetIterator it = this.createRowSetIterator(null);
    while (it.hasNext()) {
        Row r = (Row) it.next();
        if ( it.getCurrentRowIndex() == rowNumberForTopOfPage ) {
            rowAtTopOfPage = r;
            break;
        }
    }
    if ( rowAtTopOfPage != null ) {
        this.setCurrentRow(rowAtTopOfPage);
        this.scrollRangeTo(rowAtTopOfPage, 0);
    }
}

然后,调用它将页面设置为您想要的。或者,将其公开给客户端并从bean中调用它(但请确保通过AdfFacesContext.addPartialTarget添加适当的UI组件,以确保更新UI组件以反映视图对象的当前行已更改。 / p>