我是Groovy的新手。我想在Groovy线程中更新会话变量。 我不能把真正的代码放在一边,所以我要放样本代码。
public updatename()
{
println(session["firstname"]);
Thread.start
{
session["firstname"] = "atul";
println(session["firstname"]);
}
}
我能够在线程之外访问会话变量,但是我在线程内的会话中遇到以下错误
“错误java.lang.IllegalStateException:找不到线程绑定的请求: 您是指实际网络之外的请求属性吗? 请求,或处理最初接收之外的请求 线?如果您实际上是在Web请求中操作而仍然 收到此消息,您的代码可能正在运行 DispatcherServlet / DispatcherPortlet:在这种情况下,请使用 RequestContextListener或RequestContextFilter公开当前 请求“。
任何想法如何在线程
中使用会话变量答案 0 :(得分:0)
尝试在web.xml中添加以下内容
<web-app ...>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
</web-app>
它不起作用,你可以制作一个简单的DTO(POJO)并将其传递给线程。
答案 1 :(得分:0)
通常,您只能从Web请求处理线程的范围内访问会话,因为您需要请求上下文来了解要使用的会话。 Grails控制器中对session
属性的引用实际上是对Grails注入到类中的getSession()
方法的Groovy样式调用,该方法从当前请求中动态获取正确的会话。
可以在控制器操作的本地变量中存储对此会话的引用,然后在Thread.start
闭包内引用该变量:
public updatename()
{
println(session["firstname"]);
def theSession = session
Thread.start
{
theSession["firstname"] = "atul";
println(theSession["firstname"]);
}
}
但我自己没试过。