我有一个控制器定义为:

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


和客户中的吸气剂:

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


如果我使用HTML表单命中控制器,则联系信息为null。但是,如果我将吸气剂更改为

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


那么联系信息将被绑定并正确保留。我真的很困惑为什么会这样。

我已经检查了Chrome,联系信息肯定在请求参数中为:

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

最佳答案

如果您不将contactInfo设置为非null,则将继续创建新的ArrayList

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

    return contactInfo;
}

09-28 14:50