2011-12-13 1 views
3

希望を..私はGrailsの奇妙な性質例外私はここであまりにも多くのコードを入れていないよ

class Card { 
    String customerNumber 
    String memberId 
    String cardNumber 
    String issueNumber 

    Boolean active = true 

    // Audit info .. 
    Date dateCreated 
    String createdBy 
    Integer uniqId 
} 
class CardHistory extends Card { 
    static constraints = { 
     note(nullable: true, size:1..500) 
    } 

    // History note 
    String note 

    // Audit info .. 
    Date originalDateCreated 
    String originalCreatedBy 
    Integer originalUniqId 

} 

、別の..私は2つのクラスを持っている..私は奇妙な問題を考える何を持っています..

class Seat { 
... 
    Card activeCard 
} 

私は

を行うことによって、現在の1から履歴レコードを生成し、いくつかのコードを持っています0
cardHistoryInstance.properties = seat.card.properties 

が、それはだから私はそう基本的に私が個別に各プロパティで取得することができます

def seat = Seat.get(1) 

try{ 
    def cardHistoryEntry = new CardHistory(); 
    println cardHistoryEntry.properties 
    println "properties okay .." 

    assert seat 
    println "Seat okay ..." 

    assert seat.card 
    println "Card okay ..." 

    println seat.card.dateCreated 
    println "Date okay ..." 

    .... and each of the other properties  

    println seat.card.customerNumber 
    println "customer number okay .. " 

    println "Seems okay .." 

    println seat.card.properties <---- Blows up with NPE here .. 
    println "Don't get to here" 
} 
catch(e) 
{ 
    println "OOps .. An error occurred ${e} .." 
} 

...それをテストするためにこれを書いたが、キーワードが私に与えているプロパティを経由してアクセスするNullPointerException ..

を投げていますnpe ..誰もこれにどのような光を当てることができますか? のGrails 1.3.6 ..

おかげ

+1

ポストあなたがラインの原因を見ることが例外からスタックトレースNPE。 –

+0

それは私が混乱している何それは..スタックトレースは私が強調した行を指して.. println seat.card.properties ..それは私にnpeを与えるが、私は個々のプロパティのそれぞれを印刷することができます! – user566311

答えて

0

いいえ、あなたはcardactiveCardとして座席のプロパティを参照する必要がありません。

try{ 
    def cardHistoryEntry = new CardHistory(); 
    println cardHistoryEntry.properties 
    println "properties okay .." 

    assert seat 
    println "Seat okay ..." 

    assert seat.activeCard 
    println "Card okay ..." 

    println seat.activeCard.dateCreated 
    println "Date okay ..." 

    println seat.activeCard.customerNumber 
    println "customer number okay .. " 

    println "Seems okay .." 

    println seat.activeCard.properties 
    println "Don't get to here" 
} 
catch(e) 
{ 
    println "OOps .. An error occurred ${e} .." 
} 
+0

@ user566311:ここで難しいのは、私があなたの例を実行すると、実際には上記の「カード」参照をエラーなしで流し、最後のステートメントでのみ飛び出すことです。しかし、「カード」を「アクティブカード」に変更するだけで、正しい場所にエラーが表示されます。どのように変わった –

+0

申し訳ありませんが、不必要なコードを削除するためにクラスを単純化し、間違ってカードでアクティブカードを置き換えましたが、私は別々に各プロパティにアクセスできますが、プロパティ値にアクセスすることはできません..あなたは同じ結果を持っていると言いますか? – user566311

+0

@ user566311:いいえ、うまく動作します。私はあなたがここに投稿したのと同じコードを使用します。seat.activeCardの代わりにseat.cardを使用してください –