![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Zamuta |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 18.1.2006 Репутация: 4 Всего: 6 |
Всем привет.
Моё приложение регистрирует пользователей, заносит полученные данные в таблицу, а затем работает с этими данными из таблицы. Приходилось ли кому-нибудь сталкиваться с проблемой двойного нажатия кнопки отправки данных? Ведь если нажать кнопку дважды, то получатся две одинаковые записи в таблице. Есть ли готовые решения в NetBeans или Eclips'e или где-нибудь ещё? На сколько критично стоит относиться к этому вопросу? -------------------- Thank you opensource. |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
||||
|
||||
| Zamuta |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 18.1.2006 Репутация: 4 Всего: 6 |
А если получится так, что у юзера медленный инет. Он нажимает кнопку отправки данных, код проверяет есть ли такие же записи в бд, видит что нет и сохраняет данные, на всё это уходит некоторое время, а юзер после первого нажатия тут же нажал второй раз, ну нервный юзер, например, началась проверка на такие же записи в бд, логин, например, а первые данные ещё не сохранились и получается, что такого логина ещё нет и приложение ставит эти данные в очередь на запись в бд. Т.е. проверка прошла успешно, а данные записались дважды. Что тогда?
У меня на локалхосте так и получается, но это без проверки совпадения на уже существующие данные.... Это мои соображения, сомневаюсь, поэтому спрашиваю...... -------------------- Thank you opensource. |
|||
|
||||
| Sherst |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 131 Регистрация: 26.10.2005 Репутация: 2 Всего: 2 |
Что мешает сделать поле уникальным и ловить exception?
|
|||
|
||||
| chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 11 Всего: 77 |
База данных должна поддерживать транзакционность и некторорые уровни изоляции на которые следует обратить внимание ;)
Поэтому если ты в одной транзакции будешь проверять есть ли запись и вставлять - вторая вставка просто не пройдёт.
Логично А если хотя бы поставить уникальный индекс на необходимую совокупность полей -СУБД сама не допустит такого, но будет ругаться некрасиво - лучше самому сделать проверку. А выносить контроль целостности данных на клиентскую часть - не очень хорошо... :-/ Можно дополнить и продублировать, но это уже так.. фича, необходимая в определённых случаях -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
| Sherst |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 131 Регистрация: 26.10.2005 Репутация: 2 Всего: 2 |
Можно еще как-то попробовать сообщать юзеру что идет процесс записи данных...
Например сделать кнопку Добавить невидимой после окончания записи - показать. |
|||
|
||||
| chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 11 Всего: 77 |
Но это, опять-таки, лучше делать дополнительной фичей. Если важна целостность данных, а не красота(а как ещё может быть) - то надёжнее, вернее и правильнее делать это ближе к данным. Поскольку никто не мешает открыть ещё один браузер на другой машине. И уж ему-то точно будет плевать с высокой горы на видимость/невидимость/цвет/форму кнопки соседа -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
| Sherst |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 131 Регистрация: 26.10.2005 Репутация: 2 Всего: 2 |
У SQLException юзай метод getErrorCode()
Добавлено @ 18:50 chief39 согласен |
|||
|
||||
| Zamuta |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 18.1.2006 Репутация: 4 Всего: 6 |
Спасибо всем за ответы....
Вообще, проверку на совпадение логинов нужно сделать, ведь нужно както-же юзеров различать.... А для предотвращения двойного нажатия кнопки мне больше понравилась идея Sherst
Как такое можно сделать? У меня в NetBeans я вижу такие параметры для кнопки как disabled и immediate. Это не то случайно что нужно? Как Вы считаете? -------------------- Thank you opensource. |
|||
|
||||
| Sherst |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 131 Регистрация: 26.10.2005 Репутация: 2 Всего: 2 |
Zamuta для начала скажите какой web-фрейморк используете: JSF, struts и т.д.
А дальше будем думать что можно сделать ... |
|||
|
||||
| chief39 |
|
||||||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 11 Всего: 77 |
Не понял... проверку уникальности логинов при создании? Или что?
Тебе нужна функциональность или опыт работы с кнопками?
Насколько помню, в джаваскрипте можно устанавливать кнопке свойство в true - кнопка задизаблится. У меня вознил один вопрос(для начала) - это курсовая для преподавателя(самостоятельные разборки с технологиями) или коммерческое/промышленное приложение? Если второе - тогда порекомендую пересмотреть подход BTD(button driven development) и начать с продумывания архитектуры. Принцип "нарисовать кнопку, а потом придумать что она будет вызывать" может натворить много бед -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
||||||
|
|||||||
| Zamuta |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 18.1.2006 Репутация: 4 Всего: 6 |
Sherst,
Использую JSF. chief39,
Да. Т.е. перед каждой записью делать проверку. Если запись есть - то вторую не добавлять.
Мне нужна функциональность. Но существуют такие решения, как шаблоны проектирования, т.е. готовые решения, скажем валидаторы или конвертеры, если не ошибаюсь. Так вот, чтобы не изобретать велосипед, возможно уже есть методы решения этой проблемы, т.к. до меня, думаю, люди с этим сталкивались.
Это коммерческое/промышленное приложение. Дело в том, что у меня двух одинаковых записей быть не должно, это критично.... Примерно понял, делаем поле для сохранения логина в бд уникальным и используем getErrorCode() у SQLException, таким образом решаем сразу две проблемы, т.е. сохраняем все логины уникальными, и предотвращаем многократное нажатие кнопки..... Всем спасибо за ответы.... -------------------- Thank you opensource. |
||||||||
|
|||||||||
| Sherst |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 131 Регистрация: 26.10.2005 Репутация: 2 Всего: 2 |
БД сама все проверит лишь бы уникальное поле было Для jsf компонент можно использовать свойства rendered - видно/скрыто, disabled - доступно / недоступно Но в коммерческом приложении это будет лишним, а Exception можно всегда обработать. Я обычно делаю страничку Error и при возникновении exception направляю юзера на эту страничку на которой вывожу также текст ошибки . |
|||
|
||||
| alexsmirnov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 23.8.2005 Репутация: 5 Всего: 7 |
Ловля Exception и проверка уникальности в базе не поможет - после первого нажатия пользователь занес свои данные. По второму возникла ошибка - и в результате юзер видит что зарегистрироваться он не смог, хотя все в порядке.
Лучше либо действительно сразу на странице запрещать кнопку через JavaScript, либо ставить в форму скрытое поле с уникальным id и проверять повтор. |
|||
|
||||
| Zamuta |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 18.1.2006 Репутация: 4 Всего: 6 |
Кажется нашёл.
Какой способ предпочли бы Вы? 1) http://www.javable.com/javaworld/tips/136_tt/ 2) http://www.netmechanic.com/news/vol5/html_no16.htm -------------------- Thank you opensource. |
|||
|
||||
![]()
|
| Правила форума "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. |