grails 中的以下内容有什么区别:
渲染 xyz
返回渲染xyz
我在 Controller 操作中返回渲染 xyz,并且该 Controller 操作在 IE 中被多次调用。我想知道 return render 是否是罪魁祸首。 这在本地 intellij tomcat 应用程序服务器中工作正常,但在生产 weblogic 服务器中失败。
最佳答案
render
是一个void
方法,所以它没有返回值,返回它的返回值就相当于返回null。 Groovy 将不返回任何内容(例如,只是一个简单的 return
语句)和返回 null
视为等价的, Controller 操作的返回值将被忽略,除非该值是一个 Map,因为“ Controller 操作的结果”不一定是返回的东西,而是完成的东西。
具体来说,这意味着您可以发出重定向、转发或渲染调用,这些都会触发预期的响应。但是,如果您返回一个 Map,则推断它是用于渲染 GSP 的模型映射,其名称与 Controller View 文件夹中的 Action 相同,例如FooController 中的 bar
操作呈现 grails-app/views/foo/bar.gsp。
如果你有一个逻辑分支,例如在保存操作中,成功的结果之后会重定向到显示操作,但失败的结果会导致重新呈现编辑页面,并显示之前的值和错误,您可以使用简单的 if/else,例如
if (successful) {
redirect ...
}
else {
render ...
}
或者你可以早点回来,例如
if (successful) {
redirect ...
return
}
render ...
所以您看到的是将这两行合并为一行:
if (successful) {
return redirect ...
}
render ...
这有点像 hack,因为它暗示您要返回 redirect
(或其他一些 void 方法)返回的内容,但您什么也没返回。它有效并且有效,但我更喜欢将 return 语句保留在自己的行中,因为对于正在发生的事情没有歧义。
关于grails - Grails 中的渲染和返回渲染有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31276608/