1

有没有办法从 grails 项目中的任何控制器创建一个既可获取又可设置的数组?任何想法表示赞赏!

4

3 回答 3

1

您可以创建一个数组并将其放入引导程序中的 grailsApplication 中(或懒惰地创建它)。在任何控制器中,您都可以使用 grailsApplication 中的该数组。

于 2012-06-26T13:43:35.000 回答
0

您可以定义/初始化一个数组,Config.groovy然后grailsApplication.config在您的任何控制器中使用它来访问它。这只是我想不到的一种方式......

更新

这是另一个使用 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,它不是线程安全的,容易出现并发修改异常。如果您需要并发执行,您需要将您的添加/删除包装在同步方法中,或者使用事件处理程序或类似的东西发布异步事件。

于 2012-06-26T13:43:16.240 回答
0

当您说“可获取和可设置”时,您的意思是您希望任何控制器能够修改数组的各个元素,或者您希望控制器能够用另一个数组完全替换数组并使更改对其他人可见控制器?

“Grails 方式”是将数组封装在服务中并通过它访问它,服务处理任何同步所需的同步以保持一致 -如果您有可能存在的数据,您肯定需要某种同步由多个线程同时变异。或者将数据存储在您的数据库中并让它处理事务更新。

为了给出更具体的答案,我需要知道这个共享数组打算支持哪些用例。

于 2012-06-26T14:45:42.173 回答