在adf中使用getCurrentRow时出现java.lang.NullPointerException

时间:2017-01-01 08:56:42

标签: oracle-adf

我正在开发一个mater-detail页面,我可以在一个详细信息表(AstAssetReturnsVO)中插入一个新行,并将其引用键设置为主表的ID(AstAssetsVO)。在我进入JSFF调用之前,代码作为方法调用活动的一部分运行。

由于某种原因,当它到达下面的标记行时我得到NullPointerException,我不知道为什么getCurrentRow返回一个空指针。我检查了文档here,它应该返回与数据控件的当前行对应的迭代器的当前行。

请让我知道我可能做错了什么。

最诚挚的问候,

public void assetReturnInitialization(){
    getAstAssetReturnsVO().clearCache();
    getAstAssetReturnsVO().executeEmptyRowSet();
    Row row = getAstAssetReturnsVO().createRow(); 

    row.setAttribute("Stat", 99);
    row.setAttribute("AsrtDate", "1396/12/31");

    getAstAssetsVO().executeQuery();
    Row assetRow = getAstAssetsVO().getCurrentRow();    <<<<<<< ERROR OCCURS HERE
    row.setAttribute("AsetId", assetRow.getAttribute("Id"));

    getAstAssetsVO().getCurrentRow().setAttribute("Status", "Returned".toUpperCase());
    getAstAssetReturnsVO().insertRow(row);
    getAstAssetReturnsVO().setCurrentRow(row);

    return ;
}

1 个答案:

答案 0 :(得分:0)

getAstAssetsVO().executeQuery();
Row assetRow = getAstAssetsVO().getCurrentRow();    <<<<<<< ERROR OCCURS HERE

这个答案特定于上面两行代码。我没有查看您的用例和其余代码。

在vo.executeQuery()API之后,行迭代器将指向第一行上方的一个。所以,你有两个选择。要么使用vo.hasNext()来检查是否有下一行并遍历记录,或者如果你只需要第一行,那么使用vo.first()来获取它。以下是后续案例的示例代码。

getAstAssetsVO().executeQuery();
Row assetRow = getAstAssetsVO().first();
if (assetRow != null) {
    //your logic
}