Повторное включение блокировки на стороне сервера с помощью JavaScript действительно никогда не будет работать. При обработке формы submit JSF проверит атрибут disabled
еще раз перед созданием и очередью события события. Это делается как часть защиты от несанкционированных / взломанных запросов (представьте, что кнопка команды отключена, когда пользователь не является администратором сайта, такая кнопка абсолютно не должна быть разрешена только с помощью кода JavaScript, который конечный пользователь имеет полный контроль над ).
В вашем случае disabled="#{bean.disabled}"
все еще оценил true
в тот момент, заставив кнопку эффективно отключиться во время обработки формы submit и, таким образом, событие действия не будет поставлено в очередь и метод действия выиграл Не будет вызвано. Это также упоминается как точка №5 из commandButton / commandLink / ajax action / listener метод не вызывается или входное значение не обновляется .
Что вы должны делать? Просто включите кнопку JSF вместо JavaScript. Пусть вместо атрибута disabled
проверьте, пустое или нет входное значение.
delay="200"
заключается в том, чтобы избежать попадания сервера на поток аякс-запросов, по одному на каждый напечатанный символ.
Или, сначала отключите кнопку JavaScript вместо JSF. У вас уже есть правильный скрипт для этого на месте, однако ему не хватает идентификатора формы, что может привести к его неработоспособности (использование
- это неправильная практика, вы не должны этого делать).
...
Не забудьте удалить атрибут JSF disabled
из кнопки по причинам, описанным выше.