我们有单选按钮和ajax调用来改变单选按钮的值。
<h:selectOneRadio id="name" value="#{nameTO.suffix}">
<f:ajax render="fname lname"/>
<f:selectItems value="#{optionValues['suffix']}" />
</h:selectOneRadio>
如果用户选择不同的值,则ajax调用会有延迟,同时用户点击提交表单,并且空值将传递到后端(因为字段未显示在页面上)。
有没有办法在呈现ajax响应之前禁用命令链接?
答案 0 :(得分:1)
是的,当然有。您只需要通过命令按钮更改命令链接,因为JS手段不能轻易地解除JSF命令链接。如果有必要,您可以使用一些CSS来使按钮看起来更好。
完成后,您可以使用<f:ajax onevent>
来监听ajax事件。在ajax请求开始时,您可以禁用命令按钮。在ajax请求成功后,您可以重新启用命令按钮。
因此,给定此事件函数侦听器示例
function handleDisableButton(data) {
var button = document.getElementById("formId:buttonId");
switch (data.status) {
case "begin": // This is called right before ajax request is been sent.
button.disabled = true;
break;
case "complete": // This is called right after ajax response is received.
// We don't want to enable it yet here, right?
break;
case "success": // This is called right after update of HTML DOM.
button.disabled = false;
break;
}
}
或者,更短,但可能更难以解释为开始:
function handleDisableButton(data) {
document.getElementById("formId:buttonId").disabled = (data.status != "success");
}
您可以按如下方式执行所需的要求:
<f:ajax ... onevent="handleDisableButton" />