在Grails中,控制器中的操作应该有匹配的GSP文件。例如,控制器中的操作list()
将呈现list.gsp
。
反正我们可以跳过这个吗?假设我想要我的动作:writetoaFile()
只生成一个文本文件,该文件由客户端浏览器下载,然后不呈现视图。
我已尝试return
,return null
和return false
但未成功。我的代码如下:
def writetoaFile(){
response.setContentType("text/plain")
response.setHeader("Content-disposition", "attachment; filename=test.txt")
response <<"Hello World"
return
}
writetoafile.gsp
的代码:
Hey There. This is a gsp file.
现在我的应用程序将“Hello World”成功写入文件test.txt,但它也将writetoafile.gsp写入文本文件test.txt。
所以我的test.txt包含:
Hello World
Hey There. This is a gsp file.
我想跳过视图。我试过了:
return
return null
return false
response.setContentType("text/plain")
response.setContentType("")
答案 0 :(得分:5)
试试这段代码:
def writetoaFile(){
response.setContentType("text/plain")
response.setHeader("Content-disposition", "attachment; filename=test.txt")
response <<"Hello World"
response.flushBuffer()
}
答案 1 :(得分:0)
如果您没有通过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)
}
答案 2 :(得分:0)
def writetoaFile(){
//Do whatever
render ""
}
这会呈现一个空白页面。如果您想要一些文本,可以将它放在render语句中。
答案 3 :(得分:0)
尝试以下方法之一(1&amp; 2或1&amp; 3)
1)显式输出流(可能不是必需的,但要试一试)
response.outputStream << "Hello world"
2)您可以检索GrailsWebRequest和disable view rendering.
def webRequest = request.getAttribute(GrailsApplicationAttributes.WEB_REQUEST)
webRequest.setRenderView(false)
3)Use a filter并在after-&gt;模型闭包中返回false以禁用默认视图渲染。