在grails中设置会话变量1.3.7

时间:2012-07-10 17:31:25

标签: session grails scope

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

我遇到的问题是关键字session似乎无法被grails识别(它带有下划线)。此外,当我实际尝试运行应用程序时,我收到此错误:No such property: session for class:

我没有任何进口,是吗?

2 个答案:

答案 0 :(得分:2)

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

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
}

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

答案 1 :(得分:0)

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