Ошибка модального окна калитки при закрытии
Иногда при закрытии ModalWindow выскакивает сообщение "Вы хотите оставить или остаться...". Я не могу определить, почему. Например, я закрываю окно 10x (все так же), и некоторые из этих попыток заканчиваются сбоем. Это было бы хорошо, но родительская страница создается снова, и все данные теряются, что не удобно для пользователя.
Моя спецификация проекта:
- Калитка: 6.21.0
- Ява: 8
- Весна: 4.1.1. ВЫПУСК
- и другие (надеюсь, не соответствующие зависимости)
Что я сделал, попробовал или изучил до сих пор:
- когда модальное окно закрывается и возникает ошибка, родительская страница создается снова
- при возникновении ошибки закрытый обратный вызов не вызывается
- modalWindow.showUnloadConfirmation(false) - не работает. Окно подтверждения не отображается, но когда окно закрыто, родительская страница перезагружается и данные исчезают
- обновление калитки до последней версии 6.24 или Spring 4.1.6 не помогает
- Понижение до калитки 6.1.9 не помогло
- обновление до калитки 7.4 не помогло
- когда ошибка НЕ возникает, страница ModalWindow, например, генерируется потоком http 8443 exec 5 и обратный вызов перехватывается тем же потоком
- когда происходит ошибка, страница ModalWindow, например, генерируется потоком http 8443 exec 5, но когда происходит сбой, и, например, потоком http 8443 exec 9 создается новая родительская страница
- также не помогло добавить кнопку закрытия и перед вызовом window.close() очистить и отсоединить все провайдеры данных
- когда модальное окно терпит неудачу, метод window.close() в javascript является последним, что вызывается. Никакой код после этого не вызывается. После этого возможно переадресация на родительскую страницу (поэтому вы хотите оставить диалог подтверждения этой страницы).
- все вышеперечисленное можно проверить, создав новый класс Java, который расширяет ModalWindow и переопределяет защищенный метод String getCloseJavacript(), который возвращает закрывающий код JavaScript в форме String.
РЕШЕНИЕ
Проблема заключалась в том, что когда на родительскую страницу загружались данные, размер страницы был слишком велик для хранения в кеширующей памяти страницы Wicket. Поэтому, когда модальное окно было закрыто, предполагается, что сохраненная родительская страница была загружена, но никогда не сохранялась, поэтому генерировалась новая. Размер кеширующей памяти страницы Wicket можно установить в классе WicketApplication. Больше на https://ci.apache.org/projects/wicket/guide/6.x/guide/versioningCaching.html в разделе Кэширование страниц.
1 ответ
Это настраивается: используйте ModalWindow#showUnloadConfirmation(boolean) для управления им.