У меня проблема с сохранением объекта Domain. Ниже код моего контроллера:
def onContactRequest = {
if(request.method == 'POST') {
if(User.findByUserTelephone(params.userTelephone)) {
User thisUser = User.findByUserTelephone(params.userTelephone)
Contact thisContact = new Contact()
thisContact.setContact(thisUser)
println("This Contact: " + thisContact.getContact());
thisContact.setBelongsTo(request.user)
println("This User: " + request.user)
if(thisContact.save(flush: true)) {
render(thisContact.belongsTo.userName + " just requested " + thisContact.getContact().userName )
} else {
render("There was a problem saving the Contact.")
if( !thisContact.save() ) {
thisContact.errors.each {
println it
}
}
}
} else {
User thisUser = new User()
thisUser.setUserName("Not Set")
thisUser.setUserTelephone(params.userTelephone)
thisUser.save()
Contact thisContact = new Contact()
thisContact.setContact(thisUser)
thisContact.setBelongsTo(request.user)
if(thisContact.save(flush: true)) {
render(thisContact.belongsTo.userName + " just requested " + thisContact.getContact().userName )
} else {
render("There was a problem saving the Contact.")
if( !thisContact.save() ) {
thisContact.errors.each {
println it + "\n"
}
}
}
}
} else {
}
Сообщение об ошибке печатается со следующим кодом; следовательно, это очень некрасиво:
if( !thisContact.save() ) {
thisContact.errors.each {
println it + "\n"
}
}
Из того, что я могу сказать, он жалуется, что экземпляр Contact или User имеет значение null; однако это не может быть правдой (смотри ниже)
This Contact: org.icc.callrz.User.User : 2
This User: org.icc.callrz.User.User : 1
Поле 'user' в org.icc.callrz.Contact.Contact:
static belongsTo = [
user: User
]
Ошибка подробно ниже:
org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'org.icc.callrz.Contact.Contact' on field 'user': rejected value [null]; codes [org.icc.callrz.Contact.Contact.user.nullable.error.org.icc.callrz.Contact.Contact.user,org.icc.callrz.Contact.Contact.user.nullable.error.user,org.icc.callrz.Contact.Contact.user.nullable.error.org.icc.callrz.User.User,org.icc.callrz.Contact.Contact.user.nullable.error,contact.user.nullable.error.org.icc.callrz.Contact.Contact.user,contact.user.nullable.error.user,contact.user.nullable.error.org.icc.callrz.User.User,contact.user.nullable.error,org.icc.callrz.Contact.Contact.user.nullable.org.icc.callrz.Contact.Contact.user,org.icc.callrz.Contact.Contact.user.nullable.user,org.icc.callrz.Contact.Contact.user.nullable.org.icc.callrz.User.User,org.icc.callrz.Contact.Contact.user.nullable,contact.user.nullable.org.icc.callrz.Contact.Contact.user,contact.user.nullable.user,contact.user.nullable.org.icc.callrz.User.User,contact.user.nullable,nullable.org.icc.callrz.Contact.Contact.user,nullable.user,nullable.org.icc.callrz.User.User,nullable]; arguments [user,class org.icc.callrz.Contact.Contact]; default message [Property [{0}] of class [{1}] cannot be null]
Edit: у меня нет проблем с созданием объектов домена Contact с использованием кода «generate-all».
РЕШЕНИЕ : Я посмотрел на код в представлении, и похоже, что для создания идентификатора было использовано, поэтому я изменил код на:
thisContact.user.id = request.user.id
Однако потом я получил ошибку: java.lang.NullPointerException: Cannot set property 'id' on null object
, но вывод println request.user
не был пустым, поэтому я не был уверен, почему это появилось.
Затем я изменил неправильную строку на:
thisContact.user = request.user
Теперь все работает. :)