Internet Explorer 7 および 8 に大きな問題があります。
状況:
処方箋を作成する FORM があります。保存ボタンを押すと、スクリプトは DomainObject を DB に保存し、(フォームが追加されたパネルの) boolean プロパティを true に設定し、byte[] プロパティを PDF と bytestream に設定します。
Panel の RenderHead で、このブール値を読み取り、true の場合、次のコードで非表示のボタンを強制的にトリガーします。
String js = "$('#" + printPDF.getMarkupId() + "').click();";
response.renderOnDomReadyJavaScript(js);
ボタンは次のコードを実行します。
ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(new ByteArrayResourceStream(pdf, "application/pdf"));
handler.setFileName("foo.pdf");
RequestCycle.get().scheduleRequestHandlerAfterCurrent(handler);
このコードは、FF と Chrome で完全に機能します。ブラウザのダウンロード ウィンドウが表示され、ユーザーは PDF を HD に保存できます。
残念なことに、Internet Explorer には、サイトが何かをダウンロードする必要がある場合にトリガーされる、ひどいセキュリティ動作があります。その警告には、ユーザーの検証が必要です。黄色のバーが表示され、ユーザーは「ダウンロード」を押す必要があります。
スクリーンショット http://imageshack.us/a/img198/1438/securityg.jpg
[ファイルのダウンロード] をクリックすると、最初に [保存] をクリックしたときとまったく同じ状態でフォームが再度送信されます。したがって、DB に対する以前の INSERT はまだコミットされていません。セッションが以前の状態にリセットされるなど...
その結果、ドメイン オブジェクトの DB で二重の INSERT が行われます。
これを解決する手がかりはありますか?