Session 在Grails1.3.7中设置会话变量

Session 在Grails1.3.7中设置会话变量,session,grails,scope,Session,Grails,Scope,我有一个问题,可能会有一个非常简单的解决方案。我正在运行Grails1.3.7,并试图设置一个会话变量,如:session[“username”]=uName,其中uName是从数据库查询返回的值 我遇到的问题是grails似乎无法识别关键字session(它带下划线)。此外,当我实际尝试运行应用程序时,会出现以下错误:没有此类属性:类的会话: 我没有任何导入,是吗?保存会话变量必须在控制器而不是域类中完成。感谢@Igor Artamonov的有用评论。您只能在控制器、taglib和gsp中使用

我有一个问题,可能会有一个非常简单的解决方案。我正在运行Grails1.3.7,并试图设置一个会话变量,如:
session[“username”]=uName
,其中uName是从数据库查询返回的值

我遇到的问题是grails似乎无法识别关键字
session
(它带下划线)。此外,当我实际尝试运行应用程序时,会出现以下错误:
没有此类属性:类的会话:


我没有任何导入,是吗?

保存会话变量必须在控制器而不是域类中完成。感谢@Igor Artamonov的有用评论。

您只能在控制器、taglib和gsp中使用
会话
变量,而不能在服务或域类中使用。您始终可以通过线程本地持有者访问它,但请记住,只有当当前线程是请求处理程序时(即,如果它是后台线程,则没有会话):


但通常最好在控制器(或TagLib)中保留需要访问HTTP请求的逻辑,在控制器(或TagLib)中,您知道您将始终有一个“当前请求”。

您在哪里调用此代码?在一个控制器里面?哎呀,我忘了说我从哪里调用它了,它来自一个域类而不是控制器。。。让我猜猜。。。你不能在控制器中存储会话。很抱歉,你不能在域类中存储会话***我认为我应该能够批准/不批准对我自己的帖子所做的任何编辑。我理解编辑的价值,但是我觉得OP应该得到通知,并且能够决定是否保留编辑或者按照他们自己的话来修改。把我变成我只是简单的吹毛求疵,这是我写作的方式,在这种情况下没有错。我不是在一个非常专业的环境中写作。如果我是的话,我会跳过单词的缩略。。当你有足够的声誉点数时,你将能够批准/拒绝编辑等。
import org.springframework.web.context.request.RequestContextHolder

def currentRequest = RequestContextHolder.requestAttributes
if(currentRequest) { // we have been called from a web request processing thread
  // currentRequest is an instance of GrailsWebRequest
  currentRequest.session["uName"] = ...
} else {
  // not in a request handler thread, so no session available
}