grails - 我的grails Controller 发生了一件奇怪的事情,为什么?

标签 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 .
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(getFoosetFoo),因此通过查找属性并调用 getter 检查返回类型是否为闭包来发现闭包。由于 Controller (默认情况下)是原型(prototype)范围的,它们是为每个请求创建的,每个公共(public) getter 方法都会为每个请求调用。

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

关于grails - 我的grails Controller 发生了一件奇怪的事情,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14178434/

相关文章:

hibernate - Hibernate Stateless Session批量插入关联实例的有效方法

grails - 如何在Grails 3.2.x拦截器中为 Controller 匹配操作null

php - 为 Controller 设置变量 - Laravel 4

asp.net - 如何验证异步 Controller 中的模型状态

flash - 充满欢乐的快闪信息

grails - Grails脚手架隐藏表列

maven-2 - 如何在 IDE 中使用 Grails 依赖项

Heroku 上的 Grails - spring 安全核心 secureChannel.definition 导致重定向循环

asp.net-mvc-4 - .NET MVC4 ActionNameSelectorAttribute View 中的多个按钮不起作用

JQuery AJAX 通过多种 MVC Controller 方法取得成功