我正在使用Grails 2.5.6。
我有一系列先前已连续执行的任务,需要引用我在会话中使用的“lang”属性。
现在从控制器我调用一个创建线程的类,每个任务一个加速执行。添加线程后,当代码尝试访问会话时,此错误开始出现:
// update projection
var currTranslate = projection.translate();
projection.translate([currTranslate[0] + d3.event.dx, currTranslate[1] + d3.event.dy]);
// update paths
g.selectAll("path").attr("d", path);
我相信在我创建的线程中需要设置一些东西才能访问请求/会话,但找不到任何文档。
访问会话的方式是:
// update projection
var currTranslate = projection.translate();
projection.translate([currTranslate[0] + d3.event.dx, currTranslate[1] + d3.event.dy]);
// update paths coordinates
g.selectAll("path").attr("d", path);
// update circle coordinates
svg.selectAll(".city-circle")
.attr("cx",function(d){
var coords = projection([d.Attribute_Longitude,d.Attribute_Latitude]);
return coords[0];
})
.attr("cy",function(d){
var coords = projection([d.Attribute_Longitude,d.Attribute_Latitude]);
return coords[1];
})
在添加主题之前,这个工作正常。
我需要做些什么来处理新线程的代码行?
BTW我尝试了两种创建线程的方法,经典的Thread.start / treads * .join()和使用grails.async.Promises(http://docs.grails.org/2.5.6/guide/async.html)。在两者上我得到相同的错误消息。
答案 0 :(得分:0)
当 params 对象从控制器传递给线程run()方法时,我也遇到了同样的问题, 当我们将它们传递给线程时,像params,request和response这样的对象没有更长的引用,所以我们需要将它保存在另一个变量中,我的操作如下,
def paramsData = params // you can declare other objects like request and eesponse
现在您可以将变量 paramsData 传递给您的线程。
您可以尝试在web.xml中添加requestContext侦听器并按如下方式重置应用程序
<web-app> .... <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener> .... </web-app>