我有一个问题可能会有一个非常简单的解决方案。我正在运行grails 1.3.7并且我正在尝试设置一个会话变量,如:session["username"] = uName
其中uName是从数据库查询返回的值。
我遇到的问题是关键字session
似乎无法被grails识别(它带有下划线)。此外,当我实际尝试运行应用程序时,我收到此错误:No such property: session for class:
。
我没有任何进口,是吗?
答案 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的有用评论。