2013-02-04 95 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") 
    // ... 
} 
相關問題