空指针异常和空对象

时间:2011-04-17 13:20:29

标签: grails groovy nullpointerexception

我有以下几行代码:

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 个答案:

答案 0 :(得分:3)

我相信 Tomas Lycken 是对的,请尝试这样做:

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

safe navigation operator (?.)的详细信息。

答案 1 :(得分:2)

我不是groovy或grails的专家(我实际上从未使用过......),但我认为问题是你做的第一件事是检查session.user.id(在你的第一个if条款)。如果用户未登录,session.user可能会返回null,这会使.id上的呼叫抛出您看到的异常。