二重サブミットについて
> この画面には新規(doOnceNew)やファイルダウンロード(doCsvdownload)などボタンがあります。
> 1、doCsvdownloadボタンをクリックして、CSVファイルをダウンロード。
> 2、doOnceNew/別のボタンをクリックすると、DoubleSubmittedException が投げられます。
> 解決法を教えてください。
doCsvdownload のように画面を描画しない (HTML を
返さない) ものは以下のようにしてください.
・別の <form> にする.
・パラメータに newwindow=true を指定する.
・doOnce にしない
<form id="form"> ... <input type-"submit" id="doOnceNew" /> </form> <form id="CsvForm"> <input type="hidden" name="newwindow" value="true" /> ... <input type="submit" id="doCsvdownload" /> </form>
> ただし、少し複雑な一覧画面(おおくのボタンと別の処理)には、<form> を分ければ、本当にとても大変ですね.
> この場合には、どうな…
CVS ダウンロードの <form> を非表示にして,
メインの <form> に置いたボタンが押されたら
JavaScript で form.submit() してください.
<script type="text/javascript"> function csvDowonload() { var csvForm = document.getElementById('csvForm'); //必要に応じて form から input の内容をコピー csvForm.submit(); } </script> <form id="form"> ... <input type-"submit" id="doOnceNew" /> <input type="button" value="CVS" onclick="csvDownload()" /><!-- id 付けない --> </form> <form id="csvForm" style="display:none"> <input type="hidden" name="newwindow" value="true" /> ... <input type="submit" id="doCsvdownload" /> </form>