我需要访问当前会话的域类用户。以下代码起作用:
class RatingController {
def rate = {
def rating = params.rating
def artist = Artist.get( params.id )
def user = User.get(1)
user.addToRatings(new Rating(artist:artist, rating:rating))
user.save()
render(template: "/artist/rate", model: [artist: artist, rating: rating])
}
}但是,我需要访问当前会话的用户,而不是显式地获得ID为1的用户(User.get(1))。我尝试了以下代码,但它不起作用:
class RatingController {
def rate = {
def rating = params.rating
def artist = Artist.get( params.id )
def user = user.session
user.addToRatings(new Rating(artist:artist, rating:rating))
user.save()
render(template: "/artist/rate", model: [artist: artist, rating: rating])
}
}我仍然在努力完全理解httpSession的概念,所以稍微帮助一下就好了。提前谢谢。
更新
在我的UserController中,我的身份验证如下所示:
def authenticate = {
def user = User.findByLoginAndPassword(params.login, params.password)
if(user){
session.user = user
flash.message = "Hello ${user.name}!"
redirect(controller:"event", action:"list")
}else{
flash.message = "Sorry, ${params.login}. Please try again."
redirect(action:"create")
}
}发布于 2011-06-24 15:48:53
http会话只不过是在来自单个源(如浏览器)的一系列请求之间维护的数据。
要想在会议上做些什么,就去做
session.setAttribute("key", value)
要想从会话中获取数据,只需做
session.getAttribute("key")
Grails还为这里概述的会话访问增加了一些幻想。他们的例子显示
def user = session["user"]
session["user"] = "John"
asset "John" == session.user请注意,如果您使用grails插件进行身份验证和授权,它可能会提供一种获取用户的方法。例如,Spring安全性为您提供了以下内容
springSecurityService.getCurrentUser()
根据插件的详细信息,该用户可能在会话中,也可能不在会话中。
发布于 2011-06-30 23:35:28
在你的代码中我注意到你写了
def user = user.session我觉得你是说
def user = session.user我做的另一件事是把它做成session.userId ie session.userId = user.id然后
def user = User.get(session.userId)不确定这是否有必要。
发布于 2013-11-02 18:09:31
您需要使用.merge():
user.merge(flush: true)这是因为当您将实例保存到HttpSession时,它将与持久性上下文分离。下面是grails的文档:http://grails.org/doc/2.3.1/ref/Domain%20Classes/merge.html
https://stackoverflow.com/questions/6470261
复制相似问题