![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
sith |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 11.2.2007 Репутация: нет Всего: 1 |
... появилась такая проблема...
... есть страница с формой... пользователь вводит данные нажимает отправить и подчиненный сервлет записывает эти данные в файл... и возвращает страницу со всем данными которые в файле были записанны... ... в процессе отладки обнаружилось очень неприятное дело... при нажатии кнопки обновить страницу сервлет опять запускаеться и дописывает повторные данные.... и так может быть до безконечности... ... вопрос... как избежать этот баг... -------------------- Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!! |
|||
|
||||
ecologist |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 452 Регистрация: 28.2.2007 Репутация: 5 Всего: 9 |
Так разве при "настоящей" отправке не нажимается какая-то кнопка ? На этот атрибут и ловить - если установлен параметр (для кнопки) - значит это пользователь нажал. Иначе - не нажал а просот обновил.
|
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Приведи код своей формы. Я полагаю, ты не используешь атрибут action у формы, а оставляешь его дефолтовым (текущая страница). Это так?
Это сообщение отредактировал(а) batigoal - 10.7.2007, 12:18 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
ekr |
|
|||
![]() ...и это пройдет... ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 6.5.2007 Где: Moscow, RU Репутация: 12 Всего: 19 |
Используй шаблон проектирования Маркер Синхронизации.
К слову, в struts это называется transaction token, если struts используешь. |
|||
|
||||
sith |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 11.2.2007 Репутация: нет Всего: 1 |
... не работает...
... при обновлении страницы имя параметра и само значение его устанавливаемое в кнопке не пропадает... -------------------- Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!! |
|||
|
||||
sith |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 11.2.2007 Репутация: нет Всего: 1 |
... привожу код своей формы
... кстате еще один такой ньюанс... если я ввожу данные в форму русскими буквами... то в своем сервлете получаю вопросики... как это исправить... -------------------- Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!! |
|||
|
||||
Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
тут |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
А траница у тебя доступна по УРЛу /BobsBandProj/guest или какому-то другому?
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
sith |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 11.2.2007 Репутация: нет Всего: 1 |
... с кодировкой я разобрался...
... а как избавиться от проблемы с обновлением страницы... -------------------- Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!! |
|||
|
||||
fixxer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: 4 Всего: 27 |
Попробуйте использовать метод POST
Или разделите отображение формы и ее обработку, например тут Это сообщение отредактировал(а) fixxer - 10.7.2007, 17:14 -------------------- ![]() |
|||
|
||||
check |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Надо всего лишь сделать в сервлете редирект на страницу с формой после записи в файл
В этом случае значения полей обнулятся. |
|||
|
||||
sith |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 11.2.2007 Репутация: нет Всего: 1 |
batigoal ... именно так...
fixxer я не все понял в этой статье а особенно куда всунуть этот response.sendRedirect(response.encodeRedirectURL(URL)) и что поставить вместо URL -------------------- Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!! |
|||
|
||||
check |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
А, ну по ссылке, которую дал fixxer как раз этот способ описан.
|
|||
|
||||
sith |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 11.2.2007 Репутация: нет Всего: 1 |
...а нельзя как то сдлеать что бы все таки я остался на той страничке... ведь получаеться так... что пльзователь выбирает... смотреть данные или записать... выбирает записать... и после всего ему опять предлогают записать... ему нужно возвращаться назад... это мне кажеться не очень красиво...
... было бы лутше если бы форма отправила данные... сервлет отработал их... вернул страничку и обнулил параметры... -------------------- Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!! |
|||
|
||||
check |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
response.sendRedirect нужно вставить после выполнения записи в файл, т.е. сервлет,
сделав сделав свое дело должен перенаправить браузер на исходную страницу(или на какую-то другую страницу, какую ты посчитаешь нужным). Методу sendRedirect нужно передать УРЛ этой страницы. Добавлено через 1 минуту и 48 секунд Перенаправляй на тот УРЛ, который тебе нужен... |
|||
|
||||
sith |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 11.2.2007 Репутация: нет Всего: 1 |
... тут же идея такая...
... что сервлет читает форму... записывает данные в файл... и тут же выводит эти данные на экран... со всем отсальными данными которые были в файле... я не могу просто редиректить после записи на другую страницу... мне нужно эти данные отобразить... -------------------- Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!! |
|||
|
||||
check |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Можно так: обработку параметров пришедших из формы делай в методе
doPost(). Значит и форму нужно соответственно отправлять методом POST. Вывод данных из файла помести в метод doGet(). В doPost() после выполнения всех нужных действий(запись в файл и тд) пишешь
при этом произойдёт редирект на тот же сервлет, но запрос будет обрабатываться методом doGet(), в котором ты должен сделать проверку существования параметра param1, и если он есть, прочитать данные из файла и вывести их. |
|||
|
||||
PashaOvechkin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 394 Регистрация: 1.4.2007 Где: Riga, Latvia Репутация: 1 Всего: 4 |
Как кто то уже упмоянул...
Помоему ету проблему можно решитй гораздо проще. При обновлении страницы вызывается метод ГЕТ. Значит в форме нужно установить метод ПОСТ. В сервлете пускай дуПост() делает генерацию чего то там. А дуГет... Хотя бы просто показывает ту же страничку заново. Ну или конечно редиретк поможет ![]() Это сообщение отредактировал(а) PashaOvechkin - 11.7.2007, 00:05 |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
sith, просто редирект - это достаточно стандартный подход решения данной проблемы. К тому же, он поможет тебе лучше разделить логику и отображение.
Вот это и есть принципиальная ошибка. Зачем смешивать в одну кучу страничку отображения и сервлет записи? Лучше разделить - пусть определённый сервлет занимается обработкой форм, а страница - только выводит. Тогда ты просто поставишь в свою форму action="/BobsBandProj/SomeServlet">, a в нем уже сделаешь редирект на guests. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
sith |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 11.2.2007 Репутация: нет Всего: 1 |
... ЗАПИСКИ С ФРОНТА...
... и так... метод пост не помог... при обнавлении страницы все равно запускаеться сервлет с теме же параметрами... а вот редирект прошел удачно... ... приму к сведенью ваши умные вещи о разделении добавления записей в их просмотр... полностью с этим согласен но в этом варианте исполнения так уже и останеться... ... всем большое спасибо... пока что проблема решена... будут новые... обязательно сообщу... -------------------- Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!! |
|||
|
||||
IDVsbruck |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 778 Регистрация: 12.11.2006 Репутация: нет Всего: 22 |
Обойти повторное исполнение действий при обновлении страницы достаточно просто (старый дедовский способ):
в jsp-страничке до <html> (в заголовке): <% String randomStr = String.valueOf((new java.util.Random()).nextInt()); session.setAttribute("sessionAttr", randomStr); %> в форме, которая отправляется, добавить скрытый элемент: <input type="hidden" name="formAttr" value="<%= randomStr %>"/> А в сервлете делаем проверку: String sessionAttr = (String) _request.getSession().getAttribute("sessionAttr"); String formAttr = _request.getParameter("formAttr"); if (sessionAttr != null && formAttr != null) { if (!sessionAttr.equals(formAttr)) { refresh = false; } else refresh = true; } Естественно, перед выполнением действий, которые не должны повторяться, надо поставить проверку на рефреш ... Это сообщение отредактировал(а) IDVsbruck - 18.9.2007, 01:56 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |