问题:控制器的动作具有渲染标记而不传入模型。存在以“get”一词开头的动作。
的grails-app /视图/站点/ home.gsp:
homepage
SiteController.groovy:
class SiteController {
def index() {
render (view: "home")
}
def getTest() {
render "getTest"
}
}
在localhost:8080 / site访问该站点以执行SiteController的索引操作。
预期输出:主页 实际输出:getTest主页
如果index的render动作更改为:
render(view: "home", model: [:])
产生预期的输出。
如果在动作名称中的单词get之前添加了一个字符,则会生成预期的输出。
有趣的是,getEA()在IDEA中的颜色编码为紫色。还应该注意的是,如果你有多个方法在开头有单词get,那么它们都被执行了。
这在Grails 1.3.6中没有发生。这在一个全新的Grails 2.2.2项目中是可重现的,对我来说似乎是个错误。为什么会这样?
答案 0 :(得分:8)
GRAILS-9310表示这是一个已知的限制,不会更改,解决方法不是命名您的行为get*
。根本原因是
如果未返回显式模型,则控制器的属性将用作模型(Grails docs)
定义getTest()
方法时,这意味着控制器具有test
属性,当您在没有显式模型的情况下呈现“主页”视图时,将枚举控制器属性以形成模型映射。 getTest()
方法将作为此枚举过程的一部分进行调用。
如果您确实需要getTest
出现在网址中,那么您必须将实际操作命名为其他内容,然后定义自定义网址映射以将/controller/getTest
URI指向重命名的操作。