2016-03-18 18 views
0

私のコントローラで定義されているメソッドをGSPページから呼び出そうとしています。Grails 3のGSPからControllerの呼び出しメソッド

<%@ page import="com.me.MyController" %> 

<% 
    def cont = grailsApplication.classLoader.loadClass("com.me.MyController").newInstance() 
%> 
${cont.getInfo('string')} 

そして、私のコントローラに:私は私のGSPで3

前のGrailsの以前のバージョンではこの前にまったく同じことをやっている私は現在、エラーを取得しています

def getInfo(String id){ 
     return "stuff" 
    } 

ことコントローラーにはgetInfo()というメソッドがありません。このメソッドは文字列型を受け入れ、呼び出すメソッドの近くにない他のメソッドを提案します。だからGrails 3で何か変わったのですか、何か間違っていますか?

答えて

3

あなたはそのようなコントローラを呼び出すべきではありません。コントローラーがどのように使われているのかは分かりません。そのようなことをする必要がある場合は、サービスを利用してGSPにデータをフェッチ/返すタグライブラリを作成します。

あなたのGSPで
package some.package.example 

class LookupTagLib { 
    def myService 

    static namespace = "custom" 
    // use returnObjectForTags for Grails 3.x and above. 
    static returnObjForTags = ["doLookupThing"] 

    def doLookupThing = { attrs -> 
    return myService.doLookup(attrs.someParam) 
    } 
} 

そして:

${custom.doLookupThing([someParam: 'string'])} 
+0

私はこれを試してみましたが、 'return'を使用すると、何も返しません。文字列を返す 'out <<'を使用しましたが、配列が必要です。 –

+0

タグライブラリに 'returnObjForTags'を設定しましたか?上の例は動作します。私はそれが必要なときに使いましたし、あなたの状況にも役立ちます。あなたがそれを働かせることができないなら、私はこの1つが答えられたので別の質問を開くことをお勧めします、そして、今これは新しい質問です。 –

+0

それは私のために働いていない場合、あなたは私の質問に答えなかった。 –

関連する問題