我试图自定义优秀的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