我的环境:
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:
[]
<正文>
你好
正文>
安慰 :
在索引中
在getA中
为什么??
最佳答案
Grails 调用所有以“get”开头的方法来查找用作操作的闭包。由于语法 def foo = { ... }
将闭包定义为属性,Groovy 添加了 getter 和 setter(getFoo
和 setFoo
),因此通过查找属性并调用 getter 检查返回类型是否为闭包来发现闭包。由于 Controller (默认情况下)是原型(prototype)范围的,它们是为每个请求创建的,每个公共(public) getter 方法都会为每个请求调用。
所以解决方法是不要用“get”启动 Action 方法。
关于grails - 我的grails Controller 发生了一件奇怪的事情,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14178434/