Điều đó tùy thuộc vào cách bạn gửi biểu mẫu. Nếu bạn đang sử dụng <f:ajax>
hoặc bất kỳ thẻ dựa trên Ajax nào khác để thực hiện gửi bởi Ajax, thì tốt nhất bạn nên sử dụng jsf.ajax.addOnEvent()
để thêm chức năng vô hiệu hóa nút khi yêu cầu Ajax sắp được gửi và bật lại sau phản hồi Ajax được lấy ra.
Ví dụ: như sau, mà bạn bao gồm sau khi các tập lệnh Ajax JSF được bao gồm, ví dụ: bên trong một <script>
hoặc <h:outputScript>
tham chiếu tệp .js
trong <h:head>
.
jsf.ajax.addOnEvent(function(data) {
if (data.source.type != "submit") {
return; // Ignore anything else than input type="submit".
}
switch (data.status) {
case "begin":
data.source.disabled = true; // Disable input type="submit".
break;
case "complete":
data.source.disabled = false; // Re-enable input type="submit".
break;
}
});
Nếu bạn không sử dụng Ajax để thực hiện gửi, sau đó một trong những cách là để ném vào một chức năng setTimeout()
trong onclick
mà vô hiệu hóa nút một vài mili giây sau khi nhấp chuột.
Về cơ bản,
<h:commandButton
id="foo"
value="submit"
action="#{bean.submit}"
onclick="setTimeout('document.getElementById(\'' + this.id + '\').disabled=true;', 50);"
/>
Các setTimeout()
là bắt buộc, bởi vì khi bạn vô hiệu hóa nó ngay lập tức, sau đó các name=value
cặp nút sẽ không được gửi cùng với yêu cầu đó sẽ gây ra JSF để không thể xác định action
sẽ được thực hiện. Tất nhiên bạn có thể cấu trúc lại nó cho một số hàm sẵn sàng hoặc cửa sổ tải sẵn DOM áp dụng cho tất cả các nút gửi (jQuery sẽ rất hữu ích trong việc này).
java.net.SocketException: socket write error: Kết nối bị hủy bỏ bởi peer – user684434