Ошибка Grails save ();не могу понять, почему - PullRequest
2 голосов
/ 13 сентября 2011

У меня проблема с сохранением объекта 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

Теперь все работает. :)

1 Ответ

1 голос
/ 13 сентября 2011

Попробуйте заменить:

thisContact.setBelongsTo(request.user)

На:

thisContact.user = thisUser

Синтаксис, который вы используете, насколько я знаю, неверен, не говоря уже о том, что вы создаете thisUser и затем вместо этого используйте request.user.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...