grails中的以下内容之间有什么区别:
渲染xyz
返回渲染xyz
我在控制器动作中返回渲染xyz,并且在IE中多次调用该控制器动作。我想知道返回渲染是否是罪魁祸首。 这在本地intellij tomcat应用服务器中工作正常,但在生产weblogic服务器中失败。
答案 0 :(得分:6)
render
是void
方法,因此它没有返回值,返回其返回值相当于返回null。 Groovy不返回任何内容(例如只是一个简单的return
语句)并返回null
作为等价,并且忽略控制器操作的返回值,除非该值是一个Map,因为控制器操作的“结果”不一定是返回的东西,而是完成的。
具体而言,这意味着您可以发出重定向,转发或渲染调用,这些会触发预期的响应。但是,如果返回Map,则推断出用于渲染GSP的模型映射与控制器视图文件夹中的操作具有相同的名称,例如, FooController中的bar
动作呈现grails-app / views / foo / bar.gsp。
如果您有逻辑分支,例如在保存操作中,成功的结果后面是重定向到show动作,但是失败结果会导致重新呈现编辑页面,并显示先前的值和错误,您可以使用简单的if / else,例如
if (successful) {
redirect ...
}
else {
render ...
}
或者你可以提早回来,例如
if (successful) {
redirect ...
return
}
render ...
所以你看到的是将这两行合并为一个:
if (successful) {
return redirect ...
}
render ...
这有点像黑客,因为它暗示你返回redirect
(或其他一些void方法)返回的东西,但你只是没有返回任何东西。它有效,但它有效,但我倾向于将return语句保持在自己的行上,因为对于发生的事情没有任何歧义。
答案 1 :(得分:0)
您不需要返回渲染。如果render是方法中的最后一个语句,它应该自动返回。如果render不是你的最后一个语句,你可以在之后放一个返回行来强制返回。这个问题是类似的(虽然不一样,但它涉及渲染后返回)https://stackoverflow.com/a/8714846/1410671。我一直把它写成:
render xyz