grails在没有数据库支持的情况下从bootstrap.groovy填充控制器模型

时间:2017-04-21 04:58:08

标签: grails grails-controller

据我所知,使用bootstrap.groovy和控制器的标准方法是创建数据并将其保存到引导程序init()中的DB中 然后控制器可以读取数据,因此两者之间的“中间人”就是数据库。

但是,如果我想在bootstrap.groovy中创建数据并且不将它们保存在数据库中(让我们假设这些数据不需要保存)怎么办?如何将数据注入控制器以便它们可以用于视图渲染?

我们来看一个域类Book的简单示例。只需要在bootstrap中,我只想创建一本包含100本书的虚拟列表:

class BootStrap {

    def grailsApplication

    def List<Book> books

    def init = { servletContext ->
        books = new ArrayList<>()

        for (int i=0; i<100; i++) {
            books.add(new Book(numPages: 20))
        }

    }

    def destroy = {
    }
}

现在的目标是向BookController公开/注入他的书籍列表。 我该怎么办?关于这个

,我找不到任何简单的方法或答案

2 个答案:

答案 0 :(得分:0)

默认情况下,服务在Grails中是单例,因此您可以将该数据存储在服务中。但是你必须要小心,因为服务可以同时使用。

https://docs.grails.org/latest/guide/services.html

答案 1 :(得分:0)

为了概括我上面发布的问题(在阅读quindimildev的答案之后),通常每个框架都应该有一种方法来执行初始化操作......例如从文件或数据库或第三方服务初始化缓存。应用程序启动时,这些数据已准备就绪,可供控制器等使用......

我在grails中看到的典型应用程序/示例没有考虑到这一点,他们假设您的数据库已填充并通过控制器操作进行读取。这对大多数应用程序来说都很好,但是如果grails没有提供在启动时构建缓存的机制(一次可能需要几秒钟的操作),一旦应用程序启动,所有控制器都可以使用它,我会感到惊讶

我希望这能澄清我试图解决的问题