我的grails控制器发生了一件奇怪的事,为什么?

时间:2013-01-06 01:41:15

标签: grails controller

我的环境:

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

UrlMapping中有 NO SPECIAL CONFIG

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 /测试/ index.gsp中:

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

当我尝试访问[http://HOSTNAME/PRJNAME/test/index]时 我想会发生这种情况:
HTML:
&LT; HTML&GT; &LT;身体GT; 你好 &LT; /体&GT; &LT; / HTML&GT;

控制台:
在索引

但事情并非如此,实际上,就像这样:
HTML:
[]&LT; HTML&GT; &LT;身体GT; 你好 &LT; /体&GT; &LT; / HTML&GT;

控制台:
在索引中 在getA

为什么?

1 个答案:

答案 0 :(得分:1)

Grails调用以“get”开头的所有方法来查找用作操作的闭包。由于语法def foo = { ... }将闭包定义为属性,因此Groovy添加了一个getter和setter(getFoosetFoo),因此通过查找属性并调用getter来检查闭包是否发现返回类型是一个Closure。由于控制器(默认情况下)是为每个请求创建的原型作用域,因此每个请求都会调用每个公共getter方法。

因此,解决方法是不使用“get”启动操作方法。