首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails中的httpSession

Grails中的httpSession
EN

Stack Overflow用户
提问于 2011-06-24 15:41:41
回答 3查看 6.5K关注 0票数 0

我需要访问当前会话的域类用户。以下代码起作用:

代码语言:javascript
复制
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))。我尝试了以下代码,但它不起作用:

代码语言:javascript
复制
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中,我的身份验证如下所示:

代码语言:javascript
复制
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")
  }
}
EN

回答 3

Stack Overflow用户

发布于 2011-06-24 15:48:53

http会话只不过是在来自单个源(如浏览器)的一系列请求之间维护的数据。

要想在会议上做些什么,就去做

session.setAttribute("key", value)

要想从会话中获取数据,只需做

session.getAttribute("key")

Grails还为这里概述的会话访问增加了一些幻想。他们的例子显示

代码语言:javascript
复制
def user = session["user"]
session["user"] = "John"
asset "John" == session.user

请注意,如果您使用grails插件进行身份验证和授权,它可能会提供一种获取用户的方法。例如,Spring安全性为您提供了以下内容

springSecurityService.getCurrentUser()

根据插件的详细信息,该用户可能在会话中,也可能不在会话中。

票数 3
EN

Stack Overflow用户

发布于 2011-06-30 23:35:28

在你的代码中我注意到你写了

代码语言:javascript
复制
def user = user.session

我觉得你是说

代码语言:javascript
复制
def user = session.user

我做的另一件事是把它做成session.userId ie session.userId = user.id然后

代码语言:javascript
复制
def user = User.get(session.userId)

不确定这是否有必要。

票数 2
EN

Stack Overflow用户

发布于 2013-11-02 18:09:31

您需要使用.merge():

代码语言:javascript
复制
user.merge(flush: true)

这是因为当您将实例保存到HttpSession时,它将与持久性上下文分离。下面是grails的文档:http://grails.org/doc/2.3.1/ref/Domain%20Classes/merge.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6470261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档