这可能是一个基本问题,但我是新手,并试图寻找解决方案。
我需要在groovy Controller 中有一个全局变量,例如一个列表,该列表在其中一个闭包(def)中进行更新,并且其值在该def中进行更新,
该列表的新值应该在其他闭包/ def中可用。
我简单地尝试了:
class MyController {
def myList = []
def def1 = { myList = someList.clone();}
def def2 = { println myList}
}
myList
的值应显示为def1
的更新值,现在它保持为空。 static
对您有帮助吗?还是有一种直接在闭包之间传递变量的方法,因为我不希望将庞大的列表传递给GSP并返回第二个def
。
最佳答案
您的 Controller 应保持无状态。 Controller 会在每个 Action 请求时实例化,因此您的成员变量myList
将在 Action 之间被丢弃。如果您将其定义为静态,它将被MyController
的所有实例共享。
如果您将myList
定义为static,则所有访问 Controller 的客户端都将获得相同的结果。如果您要这样做,则您的列表可能应该通过域对象存储在数据库中(see chapter 5 of Grails documentation, Object Relational Mapping)。
如果您希望每个客户端在 Controller 操作之间共享自己的myList
,则您要查找的内容称为 Web流。它们提供了一种机制,可以在给定客户端执行的Controller Action 之间存储状态。 Web流记录在Grails documentation (Chapter 6 - The Web Layer)中。
关于grails - 设置全局变量并在Grails Controller 中访问它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7976772/