0

我希望能够创建全局函数,这意味着我可以跨控制器使用的函数,有点像辅助方法。

所以在一个控制器中我可以做到

useful_function(string)等等......这可能吗?

我确实在 src/groovy 中创建了一个名为 的类SiteHelper,我在正确的轨道上吗?我希望类的方法SiteHelper能够在整个控制器中使用。

4

4 回答 4

4

是的,你基本上是在正确的轨道上。您可能希望将其作为服务层的一部分。

http://grails.org/doc/latest/guide/services.html

于 2013-02-04T20:07:27.947 回答
3

您可以将其添加到所有控制器类的元类中,例如BootStrap.groovy

class BootStrap {

   def grailsApplication

   def init = { servletContext ->
      for (cc in grailsApplication.controllerClasses) {
         cc.clazz.metaClass.useful_function = { String s ->
            return ...
         }
      }
   }
}
于 2013-02-04T21:41:30.673 回答
0

在 Grails 中,不同组件之间共享逻辑的标准方法是将其放入服务中,或者在需要访问 web 层内容(如请求/响应/参数/会话/闪存)的功能的情况下,将其放入 taglib 中。您可以从任何控制器操作中调用 taglib 标签作为方法:

MyTagLib.groovy

class MyTagLib {
  def sayHello = { attrs, body ->
    out << "Hello ${attrs.name}"
  }
}

MyController.groovy

def someAction() {
  def greeting = sayHello(name:"Ian")
  // ...
}
于 2013-02-04T21:45:32.363 回答
-2

我不明白这有什么重要的。这听起来正是 Apache 的StringUtils类或IOUtils类所做的。是的,SiteHelper使用静态方法创建并导入它会做你想做的事,这是受 Java 影响(和许多其他)语言的典型做法。

于 2013-02-04T20:02:45.493 回答