Grails 在类级别声明的变量将其释放';在一个方法中设置它并从另一个方法中检索它时

Grails 在类级别声明的变量将其释放';在一个方法中设置它并从另一个方法中检索它时,grails,groovy,Grails,Groovy,假设我有一个变量为var1的类。我单击一个按钮&它调用pageLoadMethod(),加载页面,并在其中将var1设置为10。 现在,我在页面加载后单击另一个按钮ajaxMethod()&尝试检索var1值,但不获取在中设置的值 pageLoadMethod()method Class MyClass{ def var1 = 1; def pageLoadMethod(){ var1 = 10; .... }

假设我有一个变量为
var1
的类。我单击一个按钮&它调用
pageLoadMethod()
,加载页面,并在其中将var1设置为10。 现在,我在页面加载后单击另一个按钮
ajaxMethod()
&尝试检索var1值,但不获取在中设置的值
pageLoadMethod()
method

    Class MyClass{

    def var1 = 1;

       def pageLoadMethod(){
         var1 = 10;
         ....
      }

       def ajaxMethod(){
         println var1; // prints 1 instead of 10
      }
   }

这个答案的前提是MyClass是一个控制器,我从上下文中假设它。

在Grails中,默认情况下会为每个请求创建控制器实例-这就是为什么在
ajaxMethod
中看不到var1的更改值

通过在控制器中添加以下行,可以从控制器中创建单例:

static scope = "singleton"
在此之后,您应该在
ajaxMethod
中看到更改后的值


另一个问题是,当多个用户可以同时访问您的控制器时,这是否是一种好方法?如果您想使用变量在用户请求之间保存一些状态,您应该使用会话来保存这些状态。

我想
MyClass
是一种控制器。这个控制器的范围是什么?如果希望在请求之间保持其状态,则应使用会话范围


这是控制器的默认范围,所以我在会话中添加了值。