2013-02-04 67 views
0

我希望能够创建全局函数,这意味着我可以跨控制器使用的函数,类似于辅助方法。有没有一种方法可以让Grails中的控制器访问函数?

因此,在一个控制器我可以做

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

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

+0

可以使用常规类别创建这种全球可访问功能。看到这个问题:http://stackoverflow.com/questions/4195492/how-do-you-share-common-methods-in-different-grails-controllers – ataylor

回答

-2

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

+0

downvoter会关心解释什么是不正确的? – djechlin

+0

我希望没有导入的方式,可能会自动加载控制器中的方法,我真的创建了一个名为flashmsg()的方法,它只是闪烁一条消息,这在几乎每个控制器中都可能有用 - btw我没有downvote – theprestig3

+1

然后你需要让你的问题更清楚地解释这是你的需要 - 而且我并不真正了解关于“import”语句的那些诡异的东西,简短的回答是,“不,你需要导入一些东西给用它。”无论如何,这是不好的做法,因为你对可用的语言功能感到不满。 – djechlin

3

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

class BootStrap { 

    def grailsApplication 

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

分享不同组件之间的逻辑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") 
    // ... 
} 
相关问题