2009-07-28 3 views
15

例えば、私は.gspファイル内GSPの外でgrailsタグを使うことはできますか?

<g:createLink controller="user" action="show" /> 

を置くことができ、それがうまく動作します。

しかし、また、私は、たとえば、あなたがGrailsのコントローラからのtaglibメソッドを使用することができます

答えて

20

Grailsのビューの一部ではありません.groovyファイルの内部で同じ閉鎖createLinkを使用したい:

def userShow = g.createLink(controller:"user", action:"show") 

組み込みのタグライブラリ(またはg名前空間のタグライブラリ)では、メソッド呼び出しの名前空間接頭辞を省略できます。

+3

を例を参照してください 'エラー= groovy.lang.MissingPropertyExceptionを与えます。 – aroth

+0

間違いなくそれ以上です! "No such property:g"エラーの解決方法に関するMatt Christiansonの回答を参照してください。 – Twelve24

+0

私はあなたが最初にコントローラにgrailsApplicationを 'def grailsApplication'で注入する必要があると思います。サービスでは、最初に 'g 'を' def g = gspTagLibraryLookup.lookupNamespaceDispatcher( "g") 'で定義する必要があります。 –

14

サービス/フィルタにgrailsApplicationを注入します。

def grailsApplication 

そして、Spring beanを取得します。あなたがgのtaglibを参照することができる管理されていないクラスの場合

def g = grailsApplication.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib') 
def userShow = g.createLink(controller: 'user', action: 'show') 
+0

私はすべてのサービスでリンクを作成する方法を参照してください...これを投稿していただきありがとうございます! – loeschg

7

def g = ApplicationHolder.application.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib') 
5

(など、非同期ジョブ、サービスのために)コントローラの外側のGrails 2.0のようにこれを行うには、ネイティブな方法はにありますLinkGeneratorクラスを使用します。どこでも動作し、公式ドキュメントに記載されています。そのようなプロパティ:G` Grailsのコントローラでちょうど上記のコードを使用して、それよりもそれによりが存在する必要があり、ここで

http://mrhaki.blogspot.ca/2012/01/grails-goodness-generate-links-outside.html

関連する問題