JSF зависит от наличия пару имени-имени кнопки отправки для вызова определенного действия на стороне сервера. Если вы отключите форму (по крайней мере, кнопку) перед отправкой формы, тогда никакая информация не будет доступна на карте параметров запроса, и JSF не будет вызывать никаких действий.
Ваш лучший выбор - ввести таймаут, в котором вы отключите кнопку около 50 мс после отправки. Например.
onsubmit="setTimeout(function(){document.getElementById('formId:buttonId').disabled=true;},50);busyProcess();"
Явный return true;
в конце концов, кстати superflous. Кроме того, отключение элемента формы HTML напрямую не будет работать, поскольку у него нет атрибута disabled
, вы хотите отключить кнопку (и, при необходимости, другие элементы ввода).
Вот некоторые улучшения:
<h:form onsubmit="busyProcess(this);">
с
function busyProcess(form) {
setTimeout(function() {
for (var i = 0; i < form.elements.length; i++) {
form.elements[i].disabled = true;
}
}, 50);
// Remnant of your code here.
}
Update: так как я подумал, что вы сказали, что она "работает", я тестировал атрибут форме в disabled
в различных браузеров, он работает только в MSIE (удивительно ..), но не в других (реальных) браузерах. Вы не хотите быть независимым от браузера, поэтому забудьте об этом и продолжайте отключать отдельные элементы формы.
Оцените свой ответ ... но это приведет к отключению кнопки, не так ли? Что делать, если я хочу отключить всю страницу? Кроме того, вы знаете, почему это не сработает? – Mark
Вы имеете в виду всю форму? Тогда вам нужно это сделать после возвращения true, например, используя 'var a = this; setTimeout (function() {a.disabled = true;}, 0); return true' –