2013-03-24 2 views
1

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

Вот код образца:

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: нажмите кнопку «Назад в браузере» и обратите внимание на предыдущие сообщения проверки.

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

+0

Сценарий 3: браузер кэшировал эту страницу. Ошибки больше не существуют на объекте. –

+0

@JamesKleeh: Как очистить кеш браузера на страницах сервера Grails? –

ответ

0

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

See here!

+0

Я использую только 2.2 ... но мы можем вызвать clearErrors только в класс groovy (command или controller), но никаких действий не вызывается, когда я нажимаю «Назад» в браузере –

2

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

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

window.onbeforeunload = function() { }

Источник:

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

3

так же, как говорит loteq, им ловить beforeunload и запросить URL, что очищает сеанс, так же, как вы могли бы выполнить clearErrors() в контроллере

$(window).bind('beforeunload', function() {jQuery.get('${createLink(action: 'clearUploadSession')}');}); 
0

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

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

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

Смежные вопросы