跳过grails中视图的渲染

跳过grails中视图的渲染,grails,Grails,在Grails中,控制器中的操作应该有一个匹配的GSP文件。例如,控制器中的操作list()将呈现list.gsp。 还有什么我们可以跳过的吗?假设我希望我的操作:writetafile()只生成一个文本文件,该文件由客户端浏览器下载,然后不呈现视图。 我已经尝试了return、returnnull和returnfalse,但没有成功。我的代码如下所示: def writetoaFile(){ response.setContentType("text/plain")

在Grails中,控制器中的操作应该有一个匹配的GSP文件。例如,控制器中的操作
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)