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
是一种控制器。这个控制器的范围是什么?如果希望在请求之间保持其状态,则应使用会话范围
这是控制器的默认范围,所以我在会话中添加了值。