2

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 に正常に書き込みますが、テキスト ファイル test.txt には writetoafile.gsp も書き込みます。

だから私の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

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 ""
}

これにより、空白のページがレンダリングされます。テキストが必要な場合は、render ステートメントに入れることができます。

于 2013-06-18T21:32:36.117 に答える