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 检查返回类型是否为闭包来发现闭包。由于控制器(默认情况下)是原型范围的,它们是为每个请求创建的,每个公共 getter 方法都会为每个请求调用。

所以解决方法是不要用“get”启动动作方法。

于 2013-01-06T02:26:58.207 回答