2013-07-16 47 views
1

我定義爲控制器:爲什麼這個null在getter中檢查導致控制器中的值爲null?

public void saveCustomer(@Valid @ModelAttribute("customer") Customer customer) { 
    // persist 
} 

和客戶一個getter:

public List<ContactInfo> getContactInfo() { 
    if(contactInfo != null) { 
     return contactInfo; 
    } 
    else { 
     return new ArrayList<ContactInfo>(); 
    } 
} 

如果我打了控制器與HTML表單,則聯絡信息爲空。 ,如果我改變吸氣劑

public List<ContactInfo> getContactInfo() { 
    return contactInfo; 
} 

然後聯繫信息綁定,正確堅持。我真的很困惑,爲什麼會發生這種情況。

我已經在Chrome中檢查和聯絡信息肯定是在請求參數爲:

contactInfo[0].alias:test 
contactInfo[0].email:[email protected] 
+0

是否存在多個線程? –

+0

@PatriciaShanahan我沒有明確地設置多線程,但我不確定Spring在做什麼。 – theblang

回答

3

如果你不contactInfonull,它只會不斷作出新的ArrayList

public List<ContactInfo> getContactInfo() { 
    if(contactInfo == null) { 
     contactInfo = new ArrayList<ContactInfo>(); 
    } 

    return contactInfo; 
} 
+0

當我說「聯繫信息似乎迷路了」時,我真的認爲它在控制器中爲空。 「@ ModelAttribute'綁定發生了什麼?我只是不明白爲什麼空檢查會阻止綁定。 – theblang

+0

所以這個工程,雖然我不確定爲什麼。當請求到達控制器並且數據綁定發生在'Customer'時,Spring是不是應該調用setter來擴充對象?必須有一些我不明白的事情。 – theblang

+0

@mattblang:我並不熟悉Spring的內部組件或Java,但我認爲一個列表需要檢索一次,然後添加到列表中,而不是反覆檢索和替換。效率更高。 – Ryan

相關問題