我希望能够创建全局函数,这意味着我可以跨控制器使用的函数,类似于辅助方法。有没有一种方法可以让Grails中的控制器访问函数?
因此,在一个控制器我可以做
useful_function(string)
等...这可能吗?
我确实在src/groovy中创建了一个名为SiteHelper
的类,我在正确的轨道上吗?我希望类SiteHelper
的方法能够在整个控制器中使用。
我希望能够创建全局函数,这意味着我可以跨控制器使用的函数,类似于辅助方法。有没有一种方法可以让Grails中的控制器访问函数?
因此,在一个控制器我可以做
useful_function(string)
等...这可能吗?
我确实在src/groovy中创建了一个名为SiteHelper
的类,我在正确的轨道上吗?我希望类SiteHelper
的方法能够在整个控制器中使用。
我不明白这是什么东西。这听起来正是Apache的StringUtils
类或IOUtils
类所做的。是的,使用静态方法创建一个SiteHelper
并导入它将会做你想做的事情,这是Java影响(和其他许多)语言中的典型做法。
downvoter会关心解释什么是不正确的? – djechlin
我希望没有导入的方式,可能会自动加载控制器中的方法,我真的创建了一个名为flashmsg()的方法,它只是闪烁一条消息,这在几乎每个控制器中都可能有用 - btw我没有downvote – theprestig3
然后你需要让你的问题更清楚地解释这是你的需要 - 而且我并不真正了解关于“import”语句的那些诡异的东西,简短的回答是,“不,你需要导入一些东西给用它。”无论如何,这是不好的做法,因为你对可用的语言功能感到不满。 – djechlin
可以在BootStrap.groovy
它添加到所有控制器类的元类,例如:
class BootStrap {
def grailsApplication
def init = { servletContext ->
for (cc in grailsApplication.controllerClasses) {
cc.clazz.metaClass.useful_function = { String s ->
return ...
}
}
}
}
分享不同组件之间的逻辑Grails中的标准方法是把它放在一个服务,或者在需要访问诸如request/response/params/session/flash之类的web层功能的情况下在taglib中。您可以拨打标签库的标签,从任何控制器操作方法:
MyTagLib.groovy
class MyTagLib {
def sayHello = { attrs, body ->
out << "Hello ${attrs.name}"
}
}
MyController.groovy
def someAction() {
def greeting = sayHello(name:"Ian")
// ...
}
可以使用常规类别创建这种全球可访问功能。看到这个问题:http://stackoverflow.com/questions/4195492/how-do-you-share-common-methods-in-different-grails-controllers – ataylor