我希望能夠創建全局函數,這意味着我可以跨控制器使用的函數,類似於輔助方法。有沒有一種方法可以讓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