Session 创建会话时在Grails中创建会话变量

Session 创建会话时在Grails中创建会话变量,session,grails,scope,initialization,Session,Grails,Scope,Initialization,我需要在创建会话时创建会话范围变量,然后再执行任何任务(因为我的所有任务都需要一个init会话范围变量才能运行)。因为,HttpSession的会话实例是在创建会话时由grails应用程序自动创建的。开发人员希望将会话用于存储会话变量,只需使用“会话”实例即可。我无法找到init session变量将放在哪里。希望有人能帮助我。谢谢您可以使用一个侦听会话创建和会话删除的HttpSessionListener 您可以将其更改为从应用程序上下文中提取: import javax.servlet.ht

我需要在创建会话时创建会话范围变量,然后再执行任何任务(因为我的所有任务都需要一个init会话范围变量才能运行)。因为,HttpSession的会话实例是在创建会话时由grails应用程序自动创建的。开发人员希望将会话用于存储会话变量,只需使用“会话”实例即可。我无法找到init session变量将放在哪里。希望有人能帮助我。谢谢

您可以使用一个侦听会话创建和会话删除的
HttpSessionListener

您可以将其更改为从应用程序上下文中提取:

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.codehaus.groovy.grails.commons.ApplicationHolder;

public class MySessionListener implements HttpSessionListener {

private MyListener myListener;

public void sessionCreated(HttpSessionEvent event) {
String id = event.getSession().getId();
getMyListener().sessionCreated(id);
}

public void sessionDestroyed(HttpSessionEvent event) {
String id = event.getSession().getId();
getMyListener().sessionDestroyed(id);
}

public void setMyListener(MyListener myListener) {
this.myListener = myListener;
}

private synchronized MyListener getMyListener() {
if (myListener == null) {
myListener = (MyListener)ApplicationHolder.getApplication().getMainContext().getBean("myListener");
}
return myListener;
}
}
,如果不是这样的话


还有其他方法…让我知道

我觉得这看起来很熟悉:)