我的环境:
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
为什么?
答案 0 :(得分:1)
Grails调用以“get”开头的所有方法来查找用作操作的闭包。由于语法def foo = { ... }
将闭包定义为属性,因此Groovy添加了一个getter和setter(getFoo
和setFoo
),因此通过查找属性并调用getter来检查闭包是否发现返回类型是一个Closure。由于控制器(默认情况下)是为每个请求创建的原型作用域,因此每个请求都会调用每个公共getter方法。
因此,解决方法是不使用“get”启动操作方法。