Grails — как очистить предыдущие ошибки проверки в командном объекте?

Как очистить предыдущие сообщения об ошибках проверки, поступающие от объекта Command, когда пользователь нажимает кнопку «Назад» в браузере?

Вот пример кода:

def create = { UserInfoCommand  cmd ->
    if (cmd.validate()) {
        println("Command obect Show")
        render(view:"Show");
    } else {
      println("Command obect Show")
      render(view: "Create", model: [cmd:cmd]);
    }
}

Сценарий

Шаг 1: Отправьте форму без ввода каких-либо данных, после чего сообщения проверки будут отображаться на GSP из командного объекта.

Шаг 2: Отправьте форму с данными, и пользователь перейдет на страницу успеха.

Шаг 3: нажмите кнопку «Назад» в браузере и обратите внимание на предыдущие сообщения проверки.

Любая идея, что такое обходной путь для очистки сообщений проверки?


person TP_JAVA    schedule 24.03.2013    source источник
comment
Сценарий 3. Браузер кэшировал эту страницу. Ошибки больше не существуют на объекте.   -  person James Kleeh    schedule 25.03.2013
comment
@JamesKleeh: Как очистить кеш браузера на страницах сервера Grails?   -  person TP_JAVA    schedule 25.03.2013


Ответы (4)


точно так же, как говорит loteq, я ловлю перед выгрузкой и запрашиваю URL-адрес, который очищает сеанс, так же, как вы могли бы выполнить clearErrors() в контроллере

    $(window).bind('beforeunload', function() {jQuery.get('${createLink(action: 'clearUploadSession')}');} );
person john Smith    schedule 25.03.2013

Ваша проблема на стороне клиента, а не на стороне сервера. Когда вы нажимаете кнопку «Назад», клиент не перезагружает страницу, поэтому все, что вы хотите сделать на сервере, не будет выполнено.

Существует событие, которое вы можете установить в форме страницы, которое будет указывать браузеру перезагружать форму каждый раз, даже на задней панели: window.onbeforeunload. Даже размещение там пустого обработчика событий приведет к перезагрузке страницы:

window.onbeforeunload = function () { }

Источник:

http://www.hunlock.com/blogs/Mastering_The_Back_Button_With_Javascript

person Luis Muñiz    schedule 25.03.2013

Я не знаю, над какой версией Grails вы работаете, но в Grails 2.2 у вас есть метод clearErrors(), который вы можете использовать.

Смотрите здесь!

person Marco    schedule 24.03.2013
comment
Я использую только 2.2... но мы можем вызывать только clearErrors в классе groovy (команда или контроллер), но никакие действия не вызываются, когда я нажимаю "Назад" в браузере - person TP_JAVA; 25.03.2013

Я думаю, что вы ищете процесс POST Redirect GET, который объясняется в википедии.

Post/Redirect/Get (PRG) — это шаблон дизайна веб-разработки, который предотвращает дублирование отправки форм, создавая более интуитивно понятный интерфейс для пользовательских агентов (пользователей). PRG реализует закладки и кнопку обновления предсказуемым образом, что не приводит к дублированию отправки форм.

Если пользователь завершил поток (сообщение об успехе, как вы сказали), кнопка «Назад» должна перейти к началу потока вместо отображения кэшированной страницы. Если вы посмотрите, это поведение страниц скаффолда по умолчанию (создание, сохранение, редактирование, обновление). Защищенные страницы сообщений, такие как сохранение и обновление, будут выдавать redirect, что позволит избежать этого кеша. Просто создайте контроллер для класса домена, и вы поймете, о чем я говорю.

person Community    schedule 28.03.2013