以编程方式访问视图访问器并使用RowSetIterator

时间:2015-06-03 12:10:16

标签: oracle-adf jdeveloper

我对Adf很新,我被困在一个有2个VO的地方,即VO1和Vo2。我制作了一个瞬态变量“TranVar”,并将VO2的VO1中的存取器视为VA1。 在瞬态变量“TranVar”的访问器中,我以编程方式访问View Accessor VA1,因为VA1可能会产生多行,但是,我需要在该瞬态变量中发送一个值。 在瞬态变量的访问器中编写的代码是: -

        String flag = "false";
    RowSetIterator rowSet = getVA1().createRowSetIterator(null);
    Row row = null;
 System.out.println("count-" + rowSet.getRowCount());
    while (rowSet.hasNext()) {

        if (row.getAttribute("IncludeFile").equals("true")) {

            flag = "true";
        }
    }
    return flag;

我的问题是rowSet.getRowCount()返回null,这意味着它不会在循环中进入,因为它们没有行。但是,我写的查询是真的,并在sql工作表中执行时返回值。 输出总是假的。

请帮助,问题如果看起来有点混乱,请提供输入以便我可以返回。

2 个答案:

答案 0 :(得分:1)

如果您的视图访问者类型为many=True,您将直接从访问者获取RowSetIterator
否则,如果您的访问者类型为<something> to *,那么您将拥有{{1}直接作为结果。

我假设此代码驻留在ViewObjectRowImpl或EntityImpl类型类中:

<something> to 1

答案 1 :(得分:0)

与Java开发人员一样,反直觉,ADF中的访问器不是为从其他视图对象中引用视图对象而设计的。 访问器在内部由不同的视图对象实例表示,而不是您在AM中公开的实例。

出于您的目的,您需要通过应用程序模块获取视图对象实例的引用:

getApplicationModule.getVO1()

另一件事:小心使用getRowCount(),特别是在大型数据集上。 getRowCount() does the counting in JVM memory,因此它会首先获取所有行。