跳过grails中的视图渲染

时间:2013-06-18 18:20:04

标签: grails

在Grails中,控制器中的操作应该有匹配的GSP文件。例如,控制器中的操作list()将呈现list.gsp。 反正我们可以跳过这个吗?假设我想要我的动作:writetoaFile()只生成一个文本文件,该文件由客户端浏览器下载,然后不呈现视图。 我已尝试returnreturn nullreturn 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.

我想跳过视图。我试过了:

  1. return
  2. return null
  3. return false
  4. response.setContentType("text/plain")
  5. response.setContentType("")

4 个答案:

答案 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以禁用默认视图渲染。