Extension - 逆引きリファレンス - ダウンロード

ページクラスに javax.servlet.http.HttpServletResponse 型および javax.faces.context.FacesContext 型のプロパティを用意します. ライフサイクルメソッドの中で HttpServletResponsegetOutputStream() または getWriter() メソッドを呼び出して出力ストリームを取得し, コンテンツを出力します. その後, FacesContextresponseComplete() メソッドを呼び出します.

例:ページクラス (FooPage.java)

関連項目

二重サブミットを防止するボタン ( id 属性が doOnce で始まるボタン) と, CSVやPDFをダウンロードするボタンが同じフォームにあると, ダウンロードボタンを押した後に画面が書き換わらないため, 二重サブミット防止ボタンを押すと必ず二重サブミットと判定されてしまいます.

これを防ぐには, ダウンロードを行うための非表示のフォームを別途用意し, ダウンロードボタンでそのフォームをサブミットします.

ダウンロード用のフォームは非表示とし, id 属性が form または Form で終了するようにします. このフォームに type 属性が submit で, id 属性が do で始まる <input> 要素 (本当のダウンロードボタン) と, type 属性が hiddenname 属性が newwindowvalue 属性が true<input> 要素を含めます.

本来の (表示される) フォームには id 属性を持たないか値が do/go/jump で始まらない, tyep 属性が button で, onclick 属性でスクリプトの関数を呼び出すボタン (表示上のダウンロードボタン) を含めます.

スクリプトの関数は,本来のフォームからダウンロード用のフォームに必要な <input> 要素をコピーし, ダウンロードボタンをクリックして, ダウンロード用のフォームをサブミットします.

例:テンプレートHTML (foo.html)
function dowonload() { //必要に応じて form から downloadForm へ input をコピー var downloadButton = document.getElementById('doDownload'); downloadButton.click(); }
・・・
]]>

関連項目