優れた 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 クロージャーを追加して変更しました。beanClass
groovyPageLocator
def doWithSpring = {
def pageLocator = delegate.getBeanDefinition("groovyPageLocator")
pageLocator.beanClass = MyConventionGroovyPageLocator
}
ただし、これはアプリケーションの起動時に呼び出されないようです。
私はここで本当に途方に暮れています。これは簡単だと思っていましたが、ちょっとしたワームの缶詰になってしまいました。誰か提案はありますか?私がやりたいのは、プラグインによって提供されるビューをオーバーライドすることだけです...