在类级别声明的变量在一个方法中设置并从另一个方法检索它时会丢失它的值

时间:2014-05-27 10:41:38

标签: grails groovy

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

    Class MyClass{

    def var1 = 1;

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

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

2 个答案:

答案 0 :(得分:1)

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

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

您可以通过在控制器中添加此行来从控制器创建单例:

static scope = "singleton"

在此之后,您应该会在ajaxMethod中看到更改后的值。

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

答案 1 :(得分:1)

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

http://grails.org/doc/2.4.x/guide/single.html#controllersAndScopes