多个动态方法调用或在Grails中声明变量

时间:2010-04-06 03:15:57

标签: grails

在我看来,如果我需要在多个地方使用动态方法(例如Domain.findByName(“name”)),那么用它定义一个变量并参考它会更好吗?而不是在多个地方拥有动态方法?我知道这似乎是一个明显的答案,但我只是想确保Grails不会缓存它或者其他内容,实际上正在进行两次数据库调用。

2 个答案:

答案 0 :(得分:1)

默认情况下,grails只会缓存“get”请求(即Book.get(4)),如果你没有设置任何额外的缓存,你会为每个请求点击数据库(正如你所看到的) )。

有关详细信息,请参阅the 'caching queries' section of the grails documentation

如果您只想进行一次调用(这在视图中是有意义的,因为您希望它保持一致),我会在操作中执行查询并将其传递给模型,否则您也可以在视图中使用g:set进行设置(虽然这听起来更适合控制器或服务)。

答案 1 :(得分:0)

最好将域对象作为模型的一部分发送到视图,而不是从视图中调用Domain.findByName("name")

所以在你想要的控制器方法中

def myAction = {
    def myObject = Domain.findByName("name")
    // do other stuff
    [myObject: myObject]
}

然后在您的视图中,您可以通过

访问它
${myObject.property}