grails - 设置全局变量并在Grails Controller 中访问它们

标签 grails groovy

这可能是一个基本问题,但我是新手,并试图寻找解决方案。
我需要在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/

相关文章:

java - 玩! : How to place property value in groovy expression

grails - 列出集成测试中的所有 Controller ?

IntelliJ 2017.1-C 中缺少 Java 调试接口(interface) (com.sun.jdi) 包

grails - 为什么 SpringSecurityUtils 在此 Grails 单元测试中为空?

grails - 从 NavigableMap 构建菜单

java - 比较两个顺序不同的数组

java - Groovy 正则表达式不起作用

java - 使用 Java 找不到匹配的构造函数

grails - netbeans 11 是否支持 grails?

stored-procedures - 使用 groovy.sql Out 参数时出错