優れた FilterPane grails プラグインの HTML マークアップをカスタマイズしようとしていますが、少し問題があります。FilterPane は、検索/フィルター フォームをレンダリングするための一連のタグを提供します。アプリケーションでこれらをオーバーライドしたいと考えています。
_tagName.gspオーバーライドしたい s を単純にコピーできると思っていました
plugins/filterpane-2.0.1.1/grails-app/views/filterpane
の中へ
grails-app/views/filterpane
それらを変更しますが、指定されたプラグイン名プロパティで render メソッドが呼び出された場合、Grails はアプリケーションがプラグインのビューをオーバーライドしているかどうかを決してチェックしないようです。
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);
}
...
そのため、null 以外pluginNameが指定された場合、プラグインのビューを取得するだけで、アプリケーションがそれをオーバーライドしているかどうかを確認することはありません。
この問題を回避する簡単な方法は、 をオーバーライドGrailsConventionGroovyPageLocator.findTemplateInBindingするか、他の同様のメソッドをGrailsConventionGroovyPageLocator.
プラグインのビュー ディレクトリをチェックする前に、アプリケーションのビュー ディレクトリをチェックするメソッドGrailsConventionGroovyPageLocatorに置き換えて、単純なクラス オーバーライドを作成しました。findTemplateInBinding次に、デフォルトのプロパティresources.groovyを置き換えるために doWithSpring クロージャーを追加して変更しました。beanClassgroovyPageLocator
def doWithSpring = {
def pageLocator = delegate.getBeanDefinition("groovyPageLocator")
pageLocator.beanClass = MyConventionGroovyPageLocator
}
ただし、これはアプリケーションの起動時に呼び出されないようです。
私はここで本当に途方に暮れています。これは簡単だと思っていましたが、ちょっとしたワームの缶詰になってしまいました。誰か提案はありますか?私がやりたいのは、プラグインによって提供されるビューをオーバーライドすることだけです...