ADF:获取 RowSetIterator 最后一页中的剩余行

ADF: Fetch the remainder of rows in last page of RowSetIterator

我有一个 rowSetIterator,共有 12 行,rangeSize 为 5。我正在访问如下行:

RowSetIterator rs = vo.getRowSetIterator();
int totalPages = rs.getEstimatedRangePageCount();
for(int pageIndex=0; pageIndex<totalPages; pageIndex++){
    rs.scrollToRangePage(pageIndex + 1);
    Row[] rows = rs.getAllRowsInRange();
    for(int rowIndex=0; rowIndex<rows.length; rowIndex++){
        Row row = rows[rowIndex];
        print(row);
    }
    System.out.println("going to next page");
}

但是此代码会打印如下所示的行:

1 2 3 4 5
going to next page
6 7 8 9 10
going to next page
8 9 10 11 12
going to next page

有没有办法只检索滚动到最后一页时出现的剩余行,即只访问第 11 行和第 12 行(来自上面的示例)。

viewObject 是可更新的,访问模式为 SCROLLABLE。

上述案例只是一个例子。在实际情况下,我正在处理更大的 rangeSize 和更大的数据。因此,需要一些帮助来调整我的 viewObject 以提高效率。

viewObject 是一个 RowIterator,因此您不需要像那样使用自己的循环进行迭代。通过允许 ADF 框架处理范围导航,您应该不会遇到同一行两次。以下应该让你接近:

vo.reset();//puts us at slot before first row
while(vo.hasNext())
{
  Row row = vo.next();//Automatically navigates rangesets when needed
  print(row);
}

如果您关心性能,请阅读:https://docs.oracle.com/middleware/1213/adf/develop/adf-bc-view-object-tuning.htm

如果您要遍历所有行,您可能需要调整视图以具有更大的范围和获取大小(通常建议不超过 100)。

最后,与您的原始问题更相关的是,您可能需要确保未选中视图调整中的 "Fill Last Page of Rows when Paging through RowSet" 选项。