2017-01-01 2 views
0

Ich entwickle eine mater-detail-Seite, wo ich eine neue Zeile in eine Detailtabelle (AstAssetReturnsVO) einfügen und seinen referentiellen Schlüssel auf die ID der Master-Tabelle (AstAssetsVO) setzen kann . Der Code wird als Teil einer Methodenaufrufaktivität direkt vor dem JSFF-Aufruf ausgeführt.java.lang.NullPointerException bei Verwendung von getCurrentRow in adf

Aus irgendeinem Grund bekomme ich die NullPointerException, wenn es zu der markierten Zeile kommt und ich habe keine Ahnung, warum getCurrentRow einen Nullzeiger zurückgibt. Ich habe die Dokumentation here überprüft und es soll die aktuelle Zeile des Iterators entsprechend der aktuellen Zeile des Datensteuerelements zurückgeben.

Bitte lassen Sie mich wissen, was ich möglicherweise falsch mache.

Mit besten Grüßen,

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 ; 
} 
+0

Überprüfen Sie, ob 'getAstAssetsVO() 'dort' null' zurückgibt. –

+0

Überprüft bereits ... nicht der Fall. –

Antwort

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

Diese Antwort ist spezifisch für über zwei Zeilen Code. Ich habe Ihren Anwendungsfall und den Rest des Codes nicht überprüft.

Nach der vo.executeQuery() API würde der Zeileniterator auf einen über der ersten Zeile zeigen. Also, Sie haben zwei Möglichkeiten. Verwenden Sie entweder vo.hasNext(), um zu prüfen, ob die nächste Zeile vorhanden ist, und durchlaufen Sie die Datensätze, oder wenn Sie nur die erste Zeile benötigen, verwenden Sie vo.first(), um sie zu erhalten. Unten ist der Beispielcode für späteren Fall.

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

Danke Ich werde es überprüfen und Feedback so bald wie möglich geben. –

Verwandte Themen