1

私の環境:

java version "1.6.0_38"
Grails 2.1.1
grails create-app test
cd test<br>
grails create-controller com.test.Test

には特別な設定はありませんUrlMapping

com.test.TestController:

package com.test

class TestController {
    def getA(){
        def ret = []
        println "in getA"
        render ret
    }

    def index() { 
        println "in index"
        render view:"index"

    }
}

grails-app/test/index.gsp:

<html>
 <body> hello  </body>
</html>

[ http://HOSTNAME/PRJNAME/test/index]にアクセスしようとすると、次の
ようになると思います:
HTML:
<html> <body> hello </body> </html>

コンソール :
索引内


HTML: []< html
> <body> hello </body> </html>

コンソール : getA
のインデックス内

どうして??

4

1 に答える 1

1

Grails は、"get" で始まるすべてのメソッドを呼び出して、アクションとして使用されるクロージャーを見つけます。構文def foo = { ... }ではクロージャがプロパティとして定義されているため、Groovy は getter と setter ( getFooand setFoo) を追加します。そのため、プロパティを見つけて getter を呼び出して戻り値の型が Closure かどうかを確認することで、クロージャが検出されます。コントローラは(デフォルトで)リクエストごとに作成されるプロトタイプ スコープであるため、各パブリック getter メソッドはリクエストごとに呼び出されます。

したがって、回避策は、「get」でアクション メソッドを開始しないことです。

于 2013-01-06T02:26:58.207 に答える