как предотвратить повторное выполнение действия при обновлении в JSP - PullRequest
0 голосов
/ 24 августа 2009

Я использую jsp для написания приложения и столкнулся с такой проблемой, что браузер всегда будет кэшировать URL-адрес, который я выполняю, поэтому, когда пользователь обновит страницу, действие будет выполнено снова. например: «> Передачи; если я нажал на ссылку и после этого обновил страницу, это действие будет выполнено снова. Я также знаю, что мне нужно использовать, чтобы избежать этой проблемы, но это действительно не удобно.

У кого-нибудь есть лучшее решение? Любые предложения будут оценены. Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 24 августа 2009

Обычно у вас есть скрытая переменная формы, которая была сгенерирована по первому запросу и сохранена в сеансе. Сгенерируйте его как случайное число.

Затем при отправке вы проверяете это скрытое поле и проверяете переменную сеанса, а в случае совпадения обрабатываете ее и удаляете переменную сеанса.

Таким образом, нажатие назад приведет к появлению той же переменной в форме, но удаленной в сеансе, так что вы можете легко обнаружить случай.

0 голосов
/ 24 августа 2009

Это решение работает с Internet Explorer.

<script type="text/javascript">
  document.onkeydown = function(){
     if(window.event && window.event.keyCode == 116){ // Capture and remap F5  
         window.event.keyCode = 505;  
     }
     if(window.event && window.event.keyCode == 505){ // New action for F5  
         return false;  // Must return false or the browser will refresh anyway  
    }  
}
</script>
0 голосов
/ 24 августа 2009

Вы можете использовать что-то, известное как токен. В отправке формы укажите номер токена в качестве скрытого элемента формы. При создании вашей страницы, добавьте этот случайный токен в ваши СЕССИИ (в массиве). Теперь при отправке формы проверьте, существует ли случайный токен в массиве SESSION, если да, удалите его и продолжите. Если нет, то выдайте ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...