About

General

Teeda Core

Teeda Extension

Teeda Ajax

プロジェクト文書

モジュール

Built by Maven

ダウンロード

CSVやPDFをダウンロードするには

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

例:ページクラス (FooPage.java)
public HttpServletResponse response;
public FacesContext facesContext;

public Class doRedirect() throws IOException {
    OutputStream os = response.getOutputStream();
    try {
      ...
      facesContext.responseComplete();
    } finally {
      os.close();
    }
    return null;
}

関連項目

二重サブミット防止ボタンと組み合わせるには

二重サブミットを防止するボタン ( 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)
<script type="text/javascript">
function dowonload() {
  //必要に応じて form から downloadForm へ input をコピー
  var downloadButton = document.getElementById('doDownload');
  downloadButton.click();
}
</script>

<!-- 本来のフォーム -->
<form id="form">
  ・・・
  <input type="button" value="ダウンロード" onclick="download()" /><!-- id は付けない -->
</form>

<!-- 非表示のフォーム -->
<form id="downloadForm" style="display: none;">
  <input type="submit" id="doDownload" value="ダウンロード" />
  <input type="hidden" name="newwindow" value="true" />
</form>

関連項目