我試圖自定義優秀的FilterPane grails插件的HTML標記,但是我遇到了一些困難。 FilterPane提供了一堆用於呈現搜索/過濾器表單的標記,並且我想在我的應用程序中重寫這些標記。在Grails 2.2中覆蓋插件視圖
我原以爲我可以簡單地複製_tagName.gsp
s表示,我想從
plugins/filterpane-2.0.1.1/grails-app/views/filterpane
覆蓋到
grails-app/views/filterpane
,並對其進行修改,但它看起來像Grails的永遠如果使用指定的插件名稱屬性調用render方法,則檢查應用程序是否覆蓋插件的視圖。
org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateRenderer.findAndCacheTemplate
包含私有方法如下代碼:
...
GroovyPageScriptSource scriptSource;
if (pluginName == null) {
scriptSource = groovyPageLocator.findTemplateInBinding(templatePath, pageScope);
} else {
scriptSource = groovyPageLocator.findTemplateInBinding(pluginName, templatePath, pageScope);
}
...
所以當指定了非空pluginName
,我們只要抓住插件的視圖,永不檢查應用程序是否覆蓋它。
我認爲一個簡單的方法來解決這個問題將只是覆蓋GrailsConventionGroovyPageLocator.findTemplateInBinding
,或在GrailsConventionGroovyPageLocator
一些其他類似的方法,但它似乎不可能在Grails應用程序內做到這一點!
我創建了一個簡單的類覆蓋GrailsConventionGroovyPageLocator
,用檢查應用程序的視圖目錄代替findTemplateInBinding
方法,然後檢查該插件。然後我修改resources.groovy
,加入doWithSpring關閉替換默認groovyPageLocator
的beanClass
屬性:
def doWithSpring = {
def pageLocator = delegate.getBeanDefinition("groovyPageLocator")
pageLocator.beanClass = MyConventionGroovyPageLocator
}
然而,這似乎並沒有被調用時,我的應用程序啓動。
我真的很茫然。我預料到這很簡單,但它變成了一堆蠕蟲。有沒有人有什麼建議?我想要做的就是覆蓋插件提供的視圖...
是的,我可以,而且可以得出這樣的,但我真的希望我能找到一個更好的解決方案! – rcgeorge23 2013-02-14 20:33:46