В Grails я использую механизм ниже для реализации того, что я бы назвал условным диалоговым окном, запускаемым на стороне сервера: когда форма отправляется, данные должны сначала обрабатываться контроллером. Исходя из результатов, должно быть либо a) модальное подтверждение «да / нет» перед «старым» экраном или b) перенаправление на новый контроллер / представление, заменяющее «старый» экран (подтверждение не требуется).
Итак, вот мой текущий подход:
- В исходном виде у меня есть
<g:formRemote name="requestForm" url="[controller:'test', action:'testRequest']", update:"dummyRegion">
и
<span id="dummyRegion">
, которые скрыты CSS
- При отправке формы тестовый контроллер проверяет необходимость подтверждения и, если да, отображает шаблон с диалоговым окном на основе yui, включающим кнопки Да Нет перед старым экраном (что работает нормально, потому что диалоговое окно «исходит от "dummyRegion, не перезаписывая страницу). При нажатии «Да» вызывается другой правый контроллер и действие, и заменяется старый экран. Если нажать «Нет», диалоговое окно отменяется и «старый» экран отображается снова без диалогового окна. Хорошо работает до тех пор, пока здесь.
- Когда отправляете форму, и тестовый контроллер видит, что подтверждение НЕ требуется, я обычно перенаправляю прямо на другой контроллер и действие. Но проблема в том, что соответствующее представление этого контроллера не появляется, потому что оно также отображается в невидимом dummyRegion. Поэтому в настоящее время я использую шаблон GSP, включая перенаправление JavaScript, которое я отображаю вместо этого. Однако браузер часто не разрешает перенаправление JavaScript, и я думаю, что это не чистое решение.
Итак (наконец-то ;-) мой вопрос: как мне получить перенаправление контроллера, чтобы соответствующее представление «вырвалось» из моего AJAX dummyRegion, снова заменив весь экран?
Или: у вас есть лучший подход к тому, что я имею в виду? Но учтите, что на стороне клиента я не могу проверить, нужно ли подтверждение, должен быть звонок на сервер! Также я бы хотел избежать обновления всей страницы только для того, чтобы всплыло диалоговое окно подтверждения (что также возможно без AJAX).
Спасибо за любые подсказки!