0

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

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

我没有任何进口,应该吗?

4

2 回答 2

2

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

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
}

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

于 2012-07-10T22:32:24.710 回答
0

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

于 2012-07-10T17:45:30.030 回答