java - 如何在处理数据时禁用按钮并更改按钮名称

标签 java jsf jsf-2

我有一个删除按钮,用于删除表行:

//Dialog
function deletedialog(a){              
    $("<div />", {
        text: a
    }).dialog({        
        width: 600,
        buttons: {
            "Ok": function() { 
                $("#form\\:deleterow").click();
              //  $('input[id$="deleterow"]').click();               
                $(this).dialog("close"); 
            }, 
            "Cancel": function(event) { 
                $(this).dialog("close");
                event.preventDefault();
            } 
        }
    });

}

<h:commandButton id="deleterow" value="HiddenDelete" action="#{SessionsController.deleteSelectedIDs}" style="display:none">
    <f:ajax render="@form"></f:ajax>
</h:commandButton>

<!-- the delete button -->
<h:commandButton value="Delete">
    <f:ajax execute="@form" onevent="deletedialog('Do you want to delete the selected rows?')"></f:ajax>
</h:commandButton>

我希望当我在Java删除方法执行期间按下删除按钮时将其禁用。如果按钮从“删除”更改为“处理”,就像 Glassfish 中的按钮一样,我还想更改视觉名称。这种情况稍微复杂一点,因为我使用隐藏按钮。我怎样才能做到这一点?

更新后

<!-- the delete button -->
<h:button value="Delete" onclick="deletedialog('Do you want to delete the selected rows?'); return false;" />

更新 2 后

我这样编辑代码:

//Dialog
function deletedialog(button, a){
    button.value = "Processing...";
    button.disabled = true;    
    $("<div />", {
        text: a
    }).dialog({        
        width: 600,
        buttons: {
            "Ok": function() { 
                $("#form\\:deleterow").click();
              //  $('input[id$="deleterow"]').click();               
                $(this).dialog("close"); 
                button.value = "Delete";
                button.disabled = false;

            }, 
            "Cancel": function(event) { 
                $(this).dialog("close");
                event.preventDefault();
                button.value = "Delete";
                button.disabled = false;
            } 
        }
    });

}

<!-- hidden button -->
<h:commandButton id="deleterow" value="HiddenDelete" action="#{SessionsController.deleteSelectedIDs}" style="display:none">
    <f:ajax render="@form"></f:ajax>
</h:commandButton>

<!-- the delete button -->
<h:button value="Delete" onclick="deletedialog(this, 'Do you want to delete the selected rows?'); return false;" />

按钮可以正常工作。问题是,当我单击“删除”按钮时,该按钮仅在打开对话框时被禁用。当我执行后台数据库操作时,我需要保持该按钮处于禁用状态。

最佳答案

这不是 oneevent 属性的正确用法。 oneevent 属性应该指向一个特殊函数,该函数在每个 ajax 事件(开始、完成和成功)上调用,JSF 将在其中提供数据参数本身。例如

<f:ajax ... onevent="functionname" />

function functionname(data) {
    var ajaxStatus = data.status; // Can be 'begin', 'complete' and 'success'.

    switch (ajaxStatus) {
        case 'begin': // This is called right before ajax request is been sent.
            // ...
            break;

        case 'complete': // This is called right after ajax response is received.
            // ...
            break;

        case 'success': // This is called when ajax response is successfully processed.
            // ...
            break;
    }
}

这对于显示 ajax 进度/状态图像,或禁用/启用提交按钮等很有用。在那里不可能控制或阻止 ajax 请求。它只是一个监听器函数。

但是您希望在发送 ajax 请求之前调用确认对话框。您需要 Hook 按钮的 onclick 属性,并让函数根据结果返回 truefalse。最简单的形式,使用内置的 JavaScript confirm() 函数,它应该如下所示:

<h:commandButton value="Delete" onclick="return confirm('Are you sure?')">
    <f:ajax execute="@form" />
</h:commandButton>

当使用 jQuery 确认对话框函数(它会像现在一样调用隐藏按钮)时,您应该使用普通按钮来打开 jQuery 确认对话框,而不是发送 ajax 请求的命令按钮。

<h:button value="Delete" onclick="deletedialog('Do you want to delete the selected rows?'); return false;" />

更新:要更改按钮的值并禁用它,只需将按钮本身传递到 JS 函数中,然后按通常的方式更改它:

<h:button value="Delete" onclick="deletedialog(this, 'Do you want to delete the selected rows?'); return false;" />

function deletedialog(button, message) {
    button.value = "Processing...";
    button.disabled = true;

    // ...
}

当最终用户在确认对话框中选择“取消”时,不要忘记将它们恢复为正常值。

关于java - 如何在处理数据时禁用按钮并更改按钮名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10786640/

相关文章:

java - 如何在 ArrayList 的 Arraylist 中添加和检索值

java - 如何在 Tomcat 中获取 org.apache.catalina.connector.Request 对象?

Java - 静态初始化

java - Java 中的 JSF 页面验证和生成的组件 ID 问题

jsf-2 - 识别表中的选定行何时已被选中

jsf-2 - Icesfaces vs Myfaces vs Primefaces

css - Richfaces:如何完全控制 css

java - HtmlUnit 关于 cookie 和 windows 的疑问

java - 在 Seam 托管 bean 上以编程方式解析 EL 表达式

jsf - 非法状态异常 : Illegal attempt to set ViewHandler after a response has been rendered