我希望能够创建全局函数,这意味着我可以跨控制器使用一个函数,就像辅助方法一样。
所以在一个控制器中我可以做到
useful_function(string)
等......这可能吗?
我在src / groovy中创建了一个名为SiteHelper
的类,我是否在正确的轨道上?我希望类SiteHelper
的方法能够在整个控制器中使用。
答案 0 :(得分:4)
是的,你大部分时间都在正确的轨道上。您可能希望将其作为服务层的一部分。
答案 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影响(以及许多其他)语言的典型实践。