有没有办法在呈现ajax响应之前禁用命令链接

时间:2013-07-18 21:48:14

标签: javascript ajax jsf-2

我们有单选按钮和ajax调用来改变单选按钮的值。

<h:selectOneRadio id="name" value="#{nameTO.suffix}">           
        <f:ajax render="fname lname"/>
        <f:selectItems value="#{optionValues['suffix']}" />
</h:selectOneRadio>

如果用户选择不同的值,则ajax调用会有延迟,同时用户点击提交表单,并且空值将传递到后端(因为字段未显示在页面上)。

有没有办法在呈现ajax响应之前禁用命令链接?

1 个答案:

答案 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" />