1

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 が行われます。

これを解決する手がかりはありますか?

4

1 に答える 1

0

問題は、ブラウザを URL にリダイレクトするか、JS window.open(url) で URL を開く代わりに、プログラムでダウンロード リンクをクリックすることです。リンクをクリックすると、ブラウザによって制限されることがある望ましくない操作のように見えます。

于 2013-06-15T19:39:15.733 に答える