ModalWindowを閉じる際に、"Do you want to leave or stay..." というメッセージが表示されることがあります。理由を特定できません。たとえば、ウィンドウ 10x を (同じ方法で) 閉じると、これらの試みのいくつかがこの失敗に終わります。それは問題ありませんが、親ページが再構築され、すべてのデータが失われ、ユーザー フレンドリーではありません。
私のプロジェクト仕様:
- 改札: 6.21.0
- ジャワ:8
- 春: 4.1.1.RELEASE
- およびその他(関連する依存関係がないことを願っています)
これまでに行ったこと、試したこと、または調査したこと:
- モーダルウィンドウを閉じてエラーが発生すると、親ページが再構築されます
- エラーが発生した場合、クローズ コールバックは呼び出されません
- modalWindow.showUnloadConfirmation(false) - 機能しません。ウィンドウが表示されないことを確認しますが、ウィンドウを閉じると親ページがリロードされ、データがなくなります
- ウィケットを最新の 6.24 バージョンまたは Spring 4.1.6 に更新しても役に立たない
- ウィケット 6.1.9 にダウングレードしても役に立たなかった
- wicket 7.4 へのアップグレードは役に立たなかった
- エラーが発生しない場合、ModalWindow Page は、たとえば http 8443 exec 5 スレッドによって生成され、コールバックは同じスレッドによってキャッチされます。
- エラーが発生した場合、ModalWindow Page は、たとえば http 8443 exec 5スレッドによって生成されますが、失敗した場合、たとえばhttp 8443 exec 9スレッドによって新しい親ページが作成されます。
- また、閉じるボタンを追加するのにも役立ちませんでした。 window.close() を呼び出す前に、すべてのデータプロバイダーをクリアしてデタッチします
- モーダル ウィンドウが失敗すると、javascript の window.close() メソッドが最後に呼び出されます。その後のコードは呼び出されません。その後、おそらく親ページにリダイレクトされます(このため、このページを離れますか確認ダイアログが表示されます)。
- 上記のすべては、ModalWindow を拡張し、保護されたメソッド String getCloseJavacript() をオーバーライドする新しい Java クラスを作成することによってテストできます。
解決
問題は、親ページがデータをロードしたときに、ページ サイズが大きすぎて Wicket ページ キャッシュ メモリに格納できないことでした。そのため、モーダル ウィンドウを閉じると、保存された親ページが読み込まれるはずでしたが、保存されなかったため、new が生成されました。Wicket ページのキャッシュ メモリのサイズは、WicketApplication クラスで設定できます。詳細については、https://ci.apache.org/projects/wicket/guide/6.x/guide/versioningCaching.htmlのページ キャッシュのセクションを参照してください。