2

在 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

4 回答 4

5

试试这个代码:

def writetoaFile(){  
    response.setContentType("text/plain")
    response.setHeader("Content-disposition", "attachment; filename=test.txt")
    response <<"Hello World"
    response.flushBuffer()
}
于 2013-06-18T20:24:27.530 回答
0

尝试以下方法之一(1 和 2,或 1 和 3)

1)显式输出流(可能不需要,但试一试)

response.outputStream << "Hello world"

2) 您可以检索 GrailsWebRequest 并禁用视图呈现。

def webRequest = request.getAttribute(GrailsApplicationAttributes.WEB_REQUEST)
webRequest.setRenderView(false) 

3)使用过滤器并在 after->model 闭包中返回 false 以禁用默认视图渲染。

于 2013-06-18T21:54:20.163 回答
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)
}
于 2013-06-18T18:44:13.210 回答
0
def writetoaFile(){     
 //Do whatever
    render ""
}

这会呈现一个空白页面。如果你想要一些文本,你可以把它放在渲染语句中。

于 2013-06-18T21:32:36.117 回答