|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Привет всем! Волею судеб занимаюсь поддержкой портального решения, написанного другими людьми, традиционно на текущий момент недоступными для консультации. Портал написан на Java с использованием Spring MVC и Spring Forms . В целом общее представление о том как Spring MVC работает имею, даже получается какой-то функционал допиливать и расширять, но некоторые вопросы ставят в тупик, даже не знаю куда копать. Итак, имеются spring-формы у которых задана валидация - как client-side, так и на сервере, например такой конструкцией: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9.
Соответственно, для текстового поля form:input задана валидация на обязательность и возможный набор символов, которая выполняется при submit'е до отправки формы на сервер. Также на форме используется блокировка кнопки submit'а для того чтобы не возникало двойной отправки, если сервер тупит, а пользователь нетерпеливо тыкает в кнопку, типа того: Код: html 1. 2. 3. 4. 5. 6. 7.
В принципе, если все хорошо, то это работает корректно - кнопа дизейблится, форма отправляется, далее выполняются проверки на стороне сервера и, если есть ошибки, они отображаются в элементах form:errors. А вот если не проходит client-side валидация, то ошибки валидации отображаются, но кнопка сабмита остается неактивной (оно и понятно, выключить ее мы выключили, а вот включить - не включали). Но совершенно непонятно куда можно добавить включение кнопки, если валидация не выполнилась. А точнее, как я понимаю более правильное решение - выключать кнопку сабмита нужно после того как прошла валидация на клиенте, но как это перехватить - я не понимаю, так как явных функций валидации нигде не объявлено, вся валидация на клиенте исключительно прописана атрибутами spring-формы, типа "required". Пробовал вставлять что-то типа if ($('#form').isValid()), но js ругается, что подобного метода у объекта нет. Куда, вообще, копать-то? Заранее всем спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 00:58 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Михаил Балашовкнопа дизейблится, форма отправляется,это как? Еще раз по шагам юз кейс по вводу одной неправильной буквы. А вообще 2 ответа: - f12 и смотри отладчик - вопрос не по java а по js ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 06:44 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Михаил Балашоввыключать кнопку сабмита нужно после того как прошла валидация на клиенте, но как это перехватить - при каждом вводе символа есть событие. Вот туда повесить js проверку. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 06:46 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Petro123, Понимаю, что вопрос больше про JS, но проблема в том, что форма спринговая, в явном виде не видно что за код работает при проверке - в отладчике по сабмиту улетаем в jQuery, а там черт ногу сломит. Вешать обработчик на каждое поле ввода, конечно, можно, но больно уж топорно и громозко - форм много, на них полей тоже много, должен быть способ проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 08:13 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Petro123, Собственно, глобально сформулировать задачу можно так - как принудительно вызвать client-side валидацию spring-формы до того момента, когда она сама вызовется при сабмите. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 08:24 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Михаил Балашовформа спринговаяразве у спринга есть ГУИ? Поможет пр. КЛИК мышкой в эксплорере и "показать исходный код"? Дай оттуда кусок. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 08:25 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Михаил Балашов, Клинт проверка работает до сабмита! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 08:26 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Михаил БалашовВешать обработчик на каждое поле ввода,где юз кейс на символ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 08:28 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Михаил БалашовPetro123, Собственно, глобально сформулировать задачу можно так - как принудительно вызвать client-side валидацию spring-формы до того момента, когда она сама вызовется при сабмите.вместо сабмита вызвать 2 функции js: if MyIsValid() МойСабмитФормы() ; ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 08:32 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Petro123вместо сабмита вызвать 2 функции js: if MyIsValid() МойСабмитФормы() ; MyIsValid() - это имеется в виду какая-то автосгенеренная функция с именем <formName> + "IsValid"? Попробовал - такой функции нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 09:07 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Михаил Балашов, Сам напиши. Это своя. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 09:13 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Михаил Балашов, Тебе зачем нужна клиентская ты так и не написал. Юз кйса нет, Disable Enable термины перепутал. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 09:19 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Petro123Тебе зачем нужна клиентская ты так и не написал Как и любая другая клиентская, чтобы проверки, например, на обязательные поля, выполнялись до отправки формы. Это все автоматически работает - в исходниках jsp-страницы написано следующее: Код: html 1.
Соответственно, вот таким образом задается форма: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
В исходнике HTML выглядит это вот так: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Т.е. никаких дополнительных валидаций или событий не прописывается, все "волшебным образом" автоматизируется, но атрибут required="required" заставляет форму перед отправкой провалидировать поле на предмет его заполнения - если не заполнено, то поле выделяется красным, всплывает подсказка "Поле обязательно для заполнения". Petro123Disable Enable термины перепутал. Не перепутал - логика следующая, по-умолчанию кнопка submit'а активная, disable'ится она после нажатия на нее, чтобы пользователь не отправил форму повторно, пока сервер тупит (прецеденты были, на серверной стороне достаточно развитая обработка, в том числе запросы во внешние сервисы, операции с базой, соответственно, превентивно блокируем повторный submit. Но возникает проблема с "встроенной" client-side валидацией - если она не проходит, то кнопка остается заблокированной и нужно ее как-то разблокировать - reload'а формы при client-side валидации нет, вешать кучу обработчиков на все поля не хочется, более элегантным решением видится disable'ить кнопку только если валидация проходит успешно, собственно в этом и вопрос - как ее принудительно запустить? Написать свою валидацию "сверху", конечно, можно, но пипец какие костыли рядом с уже работающей штатной валидацией и потребует поддержки в десятках форм с десятками полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 10:15 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Petro123Тебе зачем нужна клиентская ты так и не написал Как и любая другая клиентская, чтобы проверки, например, на обязательные поля, выполнялись до отправки формы. Это все автоматически работает - в исходниках jsp-страницы написано следующее: Код: html 1.
Соответственно, вот таким образом задается форма: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
В исходнике HTML выглядит это вот так: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Т.е. никаких дополнительных валидаций или событий не прописывается, все "волшебным образом" автоматизируется, но атрибут required="required" заставляет форму перед отправкой провалидировать поле на предмет его заполнения - если не заполнено, то поле выделяется красным, всплывает подсказка "Поле обязательно для заполнения". Petro123Disable Enable термины перепутал. Не перепутал - логика следующая, по-умолчанию кнопка submit'а активная, disable'ится она после нажатия на нее, чтобы пользователь не отправил форму повторно, пока сервер тупит (прецеденты были, на серверной стороне достаточно развитая обработка, в том числе запросы во внешние сервисы, операции с базой, соответственно, превентивно блокируем повторный submit. Но возникает проблема с "встроенной" client-side валидацией - если она не проходит, то кнопка остается заблокированной и нужно ее как-то разблокировать - reload'а формы при client-side валидации нет, вешать кучу обработчиков на все поля не хочется, более элегантным решением видится disable'ить кнопку только если валидация проходит успешно, собственно в этом и вопрос - как ее принудительно запустить? Написать свою валидацию "сверху", конечно, можно, но пипец какие костыли рядом с уже работающей штатной валидацией и потребует поддержки в десятках форм с десятками полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 10:17 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Михаил Балашовdisable'ится она после нажатия на нее, чтобы пользователь не отправил форму повторноэтот функционал совершенно не имеет отношения к клиент валидации. Если его временно убрать то вопрос решен? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 11:00 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Михаил Балашовостается заблокированной и Два решения 1. Не блокируй, а скрой ее или на сервере не принимай повтор. 2. Повесь таймер и разблокируй через секунду Я в js вешал немодальное сообщение: Сохраняем.... И никакой дурак не жмет дважды. Ты тут в форуме не видел такую мессагу? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 11:04 |
|
Client-side валидация в spring-формах и управление кнопкой submit'а
|
|||
---|---|---|---|
#18+
Разобрался, принудительную валидацию можно вот таким образом выполнить: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 12:16 |
|
|
start [/forum/topic.php?fid=59&msg=39723402&tid=2121694]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
101ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 199ms |
0 / 0 |