我有以下几行代码:
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没有按预期工作。
答案 0 :(得分:3)
我相信 Tomas Lycken 是对的,请尝试这样做:
if (session?.user?.id != params.id)
答案 1 :(得分:2)
我不是groovy或grails的专家(我实际上从未使用过......),但我认为问题是你做的第一件事是检查session.user.id
(在你的第一个if
条款)。如果用户未登录,session.user
可能会返回null
,这会使.id
上的呼叫抛出您看到的异常。