2

这似乎应该很简单,但我感觉不到。

我有一个执行长时间运行的服务器端任务(10-15 秒)的 JSF 命令按钮。我已经看到了按钮上下文在被单击后发生变化的表单(按钮上的标签会发生变化,并且按钮会被禁用,直到处理完成)。

我正在使用 ICEFaces 并将 disabled 属性设置为基础页面代码上的布尔值。

绑定到按钮的动作侦听器更改该布尔值以禁用它,但遗憾的是,JSP 上没有更改。

任何人?

4

5 回答 5

5

您可以做的是使用 Javascript 更改按钮的状态:

<h:commandButton ... onclick="this.disabled=true"/>



关于评论的编辑:

如果前面的代码没有提交表单,那么您必须在单击后一段时间禁用按钮,而不是在单击本身“期间”。您可以使用以下代码执行此操作:

<h:commandButton ... onclick="setTimeout('this.disabled=true', 100);"/>

我不确定在 setTimeout 方法中直接使用this关键字是否能正常工作。如果没有,您可以使用另一种方式来做到这一点:

<h:commandButton ... onclick="disableButton(this.id);"/>

使用以下 Javascript 函数:

function disableButton(buttonId) {
    setTimeout("subDisableButton(" + buttonId + ")", 100);
}

function subDisableButton(buttonId) {
    var obj = document.getElementById(buttonId);
    if (obj) {
        obj.disabled = true;
    }
}

(我确信这段代码可以增强,因此)

于 2009-08-07T07:04:14.910 回答
1

类似于 romaintaz 的解决方案

对于 Firefox 特定的解决方案,以下工作(在 IE 中不起作用):

<h:commandButton ... onclick="disableButton(this.id);" />

使用 Javascript 函数:

function disableButton(buttonId) {

    var obj = document.getElementById(buttonId);

    if (obj) {
       setTimeout(function(thisObj) { thisObj.disabled=true; }, 50, obj);

    }
}
于 2011-12-09T22:27:41.577 回答
1

您应该使用 ice:commandButton 而不是 h:commandButton,因为它具有 partialSubmit 属性,它将作为 AJAX 调用执行操作。这应该会刷新按钮的状态,因此如果服务器上的属性已设置为 false,则应禁用按钮。

于 2009-09-18T22:28:08.100 回答
1

做一个 javascript submit(); 首先然后禁用按钮

于 2010-10-11T10:44:23.943 回答
0

在 icefaces 更新 DOM 后执行此操作。你可以使用ice.onAfterUpdate(callback)

这里有 jQuery

ice.onAfterUpdate(function(){
    updateButtons();
});

function updateButtons(){
   if(!isButtonEnabled()){
    jQuery(".myButton").attr('disabled', true);
    jQuery(".myButton").removeClass("iceCmdBtn").addClass("iceCmdBtn-dis");
   }else{
    jQuery(".myButton").removeAttr('disabled');
    jQuery(".myButton").removeClass("iceCmdBtn-dis").addClass("iceCmdBtn");
   }
}
于 2012-04-17T08:45:34.440 回答