Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двойное нажатие кнопки Submit, На сколько критично? 
:(
    Опции темы
Zamuta
Дата 28.11.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



Всем привет.

Моё приложение регистрирует пользователей, заносит полученные данные в таблицу, а затем работает с этими данными из таблицы.

Приходилось ли кому-нибудь сталкиваться с проблемой двойного нажатия кнопки отправки данных? Ведь если нажать кнопку дважды, то получатся две одинаковые записи в таблице. Есть ли готовые решения в NetBeans или Eclips'e или где-нибудь ещё? 


На сколько критично стоит относиться к этому вопросу?


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
powerOn
Дата 28.11.2006, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Цитата(Zamuta @  28.11.2006,  17:45 Найти цитируемый пост)
Ведь если нажать кнопку дважды, то получатся две одинаковые записи в таблице. 

Двух одинаковых записей быть не должно. Нужно перед каждой записью проверку делать. Если запись есть - то вторую не добавлять.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Zamuta
Дата 28.11.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



А если получится так, что у юзера медленный инет.  Он нажимает кнопку отправки данных, код проверяет есть ли такие же записи в бд, видит что нет и сохраняет данные, на всё это уходит некоторое время, а юзер после первого нажатия тут же нажал второй раз, ну нервный юзер, например, началась проверка на такие же записи в бд, логин, например, а первые данные ещё не сохранились и получается, что такого логина ещё нет и приложение ставит эти данные в очередь на запись в бд. Т.е. проверка прошла успешно, а данные записались дважды. Что тогда?

У меня на локалхосте так и получается, но это без проверки совпадения на уже существующие данные....

Это мои соображения, сомневаюсь, поэтому спрашиваю......


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Sherst
Дата 28.11.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 26.10.2005

Репутация: 2
Всего: 2



Что мешает сделать поле уникальным и ловить exception?
PM MAIL   Вверх
chief39
Дата 28.11.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 11
Всего: 77



База данных должна поддерживать транзакционность и некторорые уровни изоляции на которые следует обратить внимание ;)
Поэтому если ты в одной транзакции будешь проверять есть ли запись и вставлять - вторая вставка просто не пройдёт. 

Цитата(Zamuta @  28.11.2006,  18:18 Найти цитируемый пост)
У меня на локалхосте так и получается, но это без проверки совпадения на уже существующие данные....

Логично smile

А если хотя бы поставить уникальный индекс на необходимую совокупность полей -СУБД сама не допустит такого, но будет ругаться некрасиво - лучше самому сделать проверку.

А выносить контроль целостности данных на клиентскую часть - не очень хорошо... :-/
Можно дополнить и продублировать, но это уже так.. фича, необходимая в определённых случаях


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Sherst
Дата 28.11.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 26.10.2005

Репутация: 2
Всего: 2



Можно еще как-то попробовать сообщать юзеру что идет процесс записи данных...
Например сделать кнопку Добавить невидимой после окончания записи - показать.
PM MAIL   Вверх
chief39
Дата 28.11.2006, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 11
Всего: 77



Цитата(Sherst @  28.11.2006,  18:33 Найти цитируемый пост)
Можно еще как-то попробовать сообщать юзеру что идет процесс записи данных...
Например сделать кнопку Добавить невидимой после окончания записи - показать. 

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


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Sherst
Дата 28.11.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 26.10.2005

Репутация: 2
Всего: 2



У SQLException юзай метод getErrorCode() 

Добавлено @ 18:50 
chief39 согласен smile
PM MAIL   Вверх
Zamuta
Дата 28.11.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



Спасибо всем за ответы....

Вообще, проверку на совпадение логинов нужно сделать, ведь нужно както-же юзеров различать.... 

А для предотвращения двойного нажатия кнопки мне больше понравилась идея Sherst 

Цитата
Например сделать кнопку Добавить невидимой после окончания записи - показать. 


Как такое можно сделать? У меня в NetBeans я вижу такие параметры для кнопки как disabled  и immediate. Это не то случайно что нужно? 

Как Вы считаете?


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Sherst
Дата 29.11.2006, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 26.10.2005

Репутация: 2
Всего: 2



Zamuta для начала скажите какой web-фрейморк используете: JSF, struts и т.д.
А дальше будем думать что можно сделать ...
PM MAIL   Вверх
chief39
Дата 29.11.2006, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 11
Всего: 77



Цитата(Zamuta @  28.11.2006,  21:34 Найти цитируемый пост)
Вообще, проверку на совпадение логинов нужно сделать, ведь нужно както-же юзеров различать.... 

Не понял... проверку уникальности логинов при создании? Или что?

Цитата(Zamuta @  28.11.2006,  21:34 Найти цитируемый пост)
А для предотвращения двойного нажатия кнопки мне больше понравилась идея Sherst 

Тебе нужна функциональность или опыт работы с кнопками?

Цитата(Zamuta @  28.11.2006,  21:34 Найти цитируемый пост)
Как такое можно сделать? У меня в NetBeans я вижу такие параметры для кнопки как disabled  и immediate. Это не то случайно что нужно? 

Насколько помню, в джаваскрипте можно устанавливать кнопке свойство 
Цитата(Zamuta @  28.11.2006,  21:34 Найти цитируемый пост)
disabled
 в true - кнопка задизаблится.



Цитата(Zamuta @  28.11.2006,  21:34 Найти цитируемый пост)
Как Вы считаете? 

У меня вознил один вопрос(для начала) - это курсовая для преподавателя(самостоятельные разборки с технологиями) или коммерческое/промышленное приложение?
Если второе - тогда порекомендую пересмотреть подход BTD(button driven development) и начать с продумывания архитектуры. Принцип "нарисовать кнопку, а потом придумать что она будет вызывать" может натворить много бед



--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Zamuta
Дата 29.11.2006, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



Sherst, 

Цитата
Zamuta для начала скажите какой web-фрейморк используете: JSF, struts и т.д.
А дальше будем думать что можно сделать ... 

Использую JSF.

chief39, 
Цитата
Не понял... проверку уникальности логинов при создании? Или что?

Да. Т.е.  перед каждой записью делать проверку. Если запись есть - то вторую не добавлять. 
Цитата
Тебе нужна функциональность или опыт работы с кнопками?

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

Цитата
У меня вознил один вопрос(для начала) - это курсовая для преподавателя(самостоятельные разборки с технологиями) или коммерческое/промышленное приложение?
Если второе - тогда порекомендую пересмотреть подход BTD(button driven development) и начать с продумывания архитектуры. Принцип "нарисовать кнопку, а потом придумать что она будет вызывать" может натворить много бед


Это коммерческое/промышленное приложение. 

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

Примерно понял, делаем поле для сохранения логина в бд уникальным и используем getErrorCode() у SQLException, таким образом решаем сразу две проблемы, т.е. сохраняем все логины уникальными, и предотвращаем многократное нажатие кнопки..... 

Всем спасибо за ответы....


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Sherst
Дата 29.11.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 26.10.2005

Репутация: 2
Всего: 2



Цитата(Zamuta @  29.11.2006,  14:03 Найти цитируемый пост)
Да. Т.е.  перед каждой записью делать проверку. Если запись есть - то вторую не добавлять. 


БД сама все проверит лишь бы уникальное поле было smile

Для jsf компонент можно использовать свойства rendered - видно/скрыто, disabled - доступно / недоступно
Но в коммерческом приложении это будет лишним, а Exception можно всегда обработать.
Я обычно делаю страничку Error и при возникновении exception направляю юзера на эту страничку на которой вывожу также текст ошибки .

PM MAIL   Вверх
alexsmirnov
Дата 29.11.2006, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 23.8.2005

Репутация: 5
Всего: 7



Ловля Exception и проверка уникальности в базе не поможет - после первого нажатия пользователь занес свои данные. По второму возникла ошибка - и в результате юзер видит что зарегистрироваться он не смог, хотя все в порядке.
Лучше либо действительно сразу на странице запрещать кнопку через JavaScript, либо ставить в форму скрытое поле с уникальным id и проверять повтор.
PM MAIL   Вверх
Zamuta
Дата 29.11.2006, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



Кажется нашёл. smile 

Какой способ предпочли бы Вы?

1) http://www.javable.com/javaworld/tips/136_tt/
2) http://www.netmechanic.com/news/vol5/html_no16.htm


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0635 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.