Grails中渲染和返回渲染之间的区别是什么

时间:2015-07-07 18:32:04

标签: grails

grails中的以下内容之间有什么区别:

渲染xyz

返回渲染xyz

我在控制器动作中返回渲染xyz,并且在IE中多次调用该控制器动作。我想知道返回渲染是否是罪魁祸首。 这在本地intellij tomcat应用服务器中工作正常,但在生产weblogic服务器中失败。

2 个答案:

答案 0 :(得分:6)

rendervoid方法,因此它没有返回值,返回其返回值相当于返回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