跳过grails中视图的渲染
在Grails中,控制器中的操作应该有一个匹配的GSP文件。例如,控制器中的操作跳过grails中视图的渲染,grails,Grails,在Grails中,控制器中的操作应该有一个匹配的GSP文件。例如,控制器中的操作list()将呈现list.gsp。 还有什么我们可以跳过的吗?假设我希望我的操作:writetafile()只生成一个文本文件,该文件由客户端浏览器下载,然后不呈现视图。 我已经尝试了return、returnnull和returnfalse,但没有成功。我的代码如下所示: def writetoaFile(){ response.setContentType("text/plain")
list()
将呈现list.gsp
。
还有什么我们可以跳过的吗?假设我希望我的操作:writetafile()
只生成一个文本文件,该文件由客户端浏览器下载,然后不呈现视图。
我已经尝试了return
、returnnull
和returnfalse
,但没有成功。我的代码如下所示:
def writetoaFile(){
response.setContentType("text/plain")
response.setHeader("Content-disposition", "attachment; filename=test.txt")
response <<"Hello World"
return
}
现在,我的应用程序成功地将“Hello World”写入文件test.txt,但它也将writetoafile.gsp写入文本文件test.txt
因此,我的test.txt包含:
Hello World
Hey There. This is a gsp file.
我想跳过视图。我试过:
返回
返回空值
返回false
response.setContentType(“文本/普通”)
response.setContentType(“”)
如果您没有通过ajax调用您的操作,请尝试返回您的响应。像这样的
def downloadMe ={
response.contentType = grailsApplication.config.grails.mime.types["excel"]
def fileName= "text.xlsx'
response.setHeader("Content-Disposition","attachment; filename=\"" + fileName + "\"")
return myWrite(response)
}
请尝试以下代码:
def writetoaFile(){
response.setContentType("text/plain")
response.setHeader("Content-disposition", "attachment; filename=test.txt")
response <<"Hello World"
response.flushBuffer()
}
def writetoaFile(){
response.setContentType(“文本/普通”)
setHeader(“内容处置”、“附件;文件名=test.txt”)
回应
这将呈现一个空白页。如果您需要一些文本,可以将其放在render语句中。尝试以下方法之一(1&2或1&3)
1) 显式输出流(可能不需要,但可以尝试)
3) 并在after->model closure中返回false以禁用默认视图渲染。您不必拥有与每个控制器方法关联的视图。您始终可以(就像控制器的最后一行)执行以下操作:渲染“一些文本”甚至渲染“”您好,BZ,谢谢您的回复,但我无法使用render,因为我正在根据某些逻辑动态生成一个文本文件。因此,您要做的是生成该文件,将其写入文件系统,然后进行渲染?您希望该文件看起来像一个页面吗?还是希望提示查看器将其另存为文件等?如果您愿意的话呈现的文件:您可以执行file t=new file(path/to/file);render t.text我不尝试呈现该文件。我只是希望将其下载到文件系统。浏览器必须提示将其保存为grails 1.3.7中的文件。我使用response.outputStream获得了更好的结果
def writetoaFile(){
response.setContentType("text/plain")
response.setHeader("Content-disposition", "attachment; filename=test.txt")
response <<"Hello World"
response.flushBuffer()
}
def writetoaFile(){
//Do whatever
render ""
}
response.outputStream << "Hello world"
def webRequest = request.getAttribute(GrailsApplicationAttributes.WEB_REQUEST)
webRequest.setRenderView(false)