Function 在src/groovy中使用会话

Function 在src/groovy中使用会话,function,session,grails,groovy,Function,Session,Grails,Groovy,我想在src/groovy类的函数a()内的会话中设置一个值,并在同一src/groovy类的函数B()内使用该值。可能吗?我无法在函数之间传递值,因为它们已被重写。我引用了这一点,但不太了解实现。提前谢谢。 编辑:这里函数A是crawler4j的访问函数,函数B是handlePageStatusCode()很难理解您在这里想要实现什么。在HTTP请求期间,会话仅对连接的用户有意义。如果您使用的是来自控制器的src/groovy类,那么可以将会话作为方法的参数传递给方法。否则,您将如何使用它?您

我想在src/groovy类的函数a()内的会话中设置一个值,并在同一src/groovy类的函数B()内使用该值。可能吗?我无法在函数之间传递值,因为它们已被重写。我引用了这一点,但不太了解实现。提前谢谢。
编辑:这里函数A是crawler4j的访问函数,函数B是handlePageStatusCode()

很难理解您在这里想要实现什么。在HTTP请求期间,会话仅对连接的用户有意义。如果您使用的是来自控制器的src/groovy类,那么可以将会话作为方法的参数传递给方法。否则,您将如何使用它?

您引用的链接就是一条出路-静态方法将为您提供属于当前正在执行的请求的实例,或者如果您在未运行控制器操作的线程上调用它,则为
null
。一旦你有了
GrailsWebRequest
,你就可以从那里访问会话、请求、响应、参数和flash(通过
getFlashScope()
)。

我制作了一个小实用Java类来处理在src/groovy、src/Java或grails app/services这样的地方访问会话。您可以尝试使用它:

public class SessionUtil {

    /**
     * Returns the current session. This can be used in classes where the session variable is not set by Grails, such as Services.
     * @return the session
     */
    public static GrailsHttpSession getSession() {
        return WebUtils.retrieveGrailsWebRequest().getSession();
    }
}
要使用它,无论您在哪里需要会话,您都要编写:

def session = SessionUtil.getSession()

“我无法在函数之间传递值,因为它们已被重写。”。这没有道理。你能澄清一下吗?我的意思是我不能改变功能原型。它们是crawler4j的重写函数,因此我不能将这些值作为函数参数传递。在使用方法之前,您不能只创建一个类属性并分配它?在crawler4j中,它直接转到visit函数。我不能在BasicCrawler类中使用任何其他自定义函数。它不会被执行谢谢。你能分享一些例子吗?@ayushi没有什么要说的了-
def session=RequestContextHolder.requestAttributes?.session
@IanRoberts我无法解释找到这篇文章我有多高兴。非常感谢您提供这些信息!一旦我使用此代码,我的爬虫程序就会停止工作:(你得到了什么错误?任何异常?堆栈跟踪?没有什么。它只是停止了我的爬虫程序的运行。每当我尝试在我的src/groovyBasicCrawler类中使用会话时,我的爬虫程序都不起作用。我想它在某种程度上干扰了爬虫4j的功能,尽管我可能是错的。但你的方法是好的。Thanks@ayushi记住会话只能在处理web请求的线程上访问,即在控制器操作(直接或间接)调用的代码中。如果爬虫程序使用后台线程,则无法访问会话。