【发布时间】:2012-06-26 13:37:03
【问题描述】:
有没有办法从 grails 项目中的任何控制器创建一个既可获取又可设置的数组?任何想法表示赞赏!
【问题讨论】:
-
为什么不创建一个域类来表示您的数组?
标签: arrays grails controller global-variables
有没有办法从 grails 项目中的任何控制器创建一个既可获取又可设置的数组?任何想法表示赞赏!
【问题讨论】:
标签: arrays grails controller global-variables
您可以创建一个数组并将其放入引导程序中的 grailsApplication 中(或懒惰地创建它)。 在任何控制器中,您都可以使用 grailsApplication 中的该数组。
【讨论】:
当您说“可获取和可设置”时,您的意思是您希望任何控制器能够修改数组的各个元素,或者您希望控制器能够用另一个数组完全替换数组并进行更改对其他控制器可见?
“Grails 方式”是将数组封装在一个服务中并通过它访问它,服务处理任何同步所需的同步以保持一致 - 你肯定需要同步 一些 kind 如果你有可能被多个线程同时改变的数据。或者将数据存储在您的数据库中并让其处理事务更新。
要给出更具体的答案,我需要知道这个共享数组打算支持哪些用例。
【讨论】:
您可以在Config.groovy 中定义/初始化一个数组,然后在您的任何控制器中使用grailsApplication.config 访问它。这只是我想不到的一种方式......
更新
这是另一个使用 Bootstrap 的简单示例:
Bootstrap.groovy
class BootStrap {
def grailsApplication
def init = { servletContext ->
grailsApplication.config.myArray = []
}
def destroy = {
}
}
某些控制器
class TestController {
def addItem() {
grailsApplication.config.myArray << "Value ${grailsApplication.config.myArray.size()}"
render grailsApplication.config.myArray
}
}
不过,您需要小心使用这种方法。 Groovy 默认使用 ArrayList,它不是线程安全的,容易出现并发修改异常。如果您需要并发执行,则需要将添加/删除包装在同步方法中,或者使用事件处理程序或类似的东西发布异步事件。
【讨论】: