Исключение нулевого указателя и нулевые объекты - PullRequest
0 голосов
/ 17 апреля 2011

У меня есть следующие строки кода:

def edit = {
        if (session.user.id != params.id){
            flash.message = "You can only edit yourself."
            redirect(action:list)
            return
            }
        def user = User.get(params.id)
            if (!user){
                flash.message = "Login first before you edit anyone."
                redirect(action:list)
                }
            else{
                return [user:user]
                }
        }

Я довольно новичок в Groovy и Grails, поэтому, пожалуйста, будьте осторожны со мной. В любом случае, приведенный выше код работает только тогда, когда пользователь зашел на сайт. Когда пользователь пытается что-то редактировать, когда он не вошел в систему, User.get(params.id) выдает исключение. Это в свою очередь показывает мне следующее:

java.lang.NullPointerException: Cannot get property 'id' on null object

    at com.hyun.UserController$_closure4.doCall(UserController.groovy:25)

    at com.hyun.UserController$_closure4.doCall(UserController.groovy)

    at java.lang.Thread.run(Thread.java:662)

Вопрос в том, как мне правильно с этим справиться? Я полагаю, что ответ лежит где-то примерно так:

if (!user){
                flash.message = "Login first before you edit anyone."
                redirect(action:list)
                }

Но я не знаю, как с этим справиться. Пожалуйста, помогите мне! Flash.message не работает должным образом.

Ответы [ 2 ]

3 голосов
/ 17 апреля 2011

Я верю Томас Ликен прав, попробуйте вместо этого:

if (session?.user?.id != params.id)

Более подробная информация о операторе безопасной навигации (?.) .

2 голосов
/ 17 апреля 2011

Я не эксперт по Groovy или Grails (я фактически никогда не работал ни с одним из них ...), но я думаю, что проблема в том, что первое, что вы делаете, это проверяете на session.user.id (в вашем первом if пункт). Если пользователь не вошел в систему, session.user, вероятно, вернет null, что делает вызов на .id сгенерированным исключением, которое вы видите.

...