有没有办法让Grails中的控制器可以访问函数?

时间:2013-02-04 20:00:07

标签: grails groovy

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

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

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

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

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

class BootStrap {

   def grailsApplication

   def init = { servletContext ->
      for (cc in grailsApplication.controllerClasses) {
         cc.clazz.metaClass.useful_function = { String s ->
            return ...
         }
      }
   }
}

答案 2 :(得分:0)

在Grails中不同组件之间共享逻辑的标准方法是将其放入服务中,或者在需要访问web层事务(如request / response / params / session / flash)的函数的情况下将其置于taglib中。您可以从任何控制器操作中调用taglib标记作为方法:

<强> MyTagLib.groovy

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

<强> MyController.groovy

def someAction() {
  def greeting = sayHello(name:"Ian")
  // ...
}

答案 3 :(得分:-2)

我没有得到关于此的重要信息。这听起来正是Apache的StringUtils类或IOUtils类所做的。是的,使用静态方法创建SiteHelper并导入它将执行您想要的操作,并且是受Java影响(以及许多其他)语言的典型实践。