2

これはかなり簡単なように思えますが、私はそれを感じていません。

長時間実行されるサーバー側のタスク (10 ~ 15 秒) を実行する JSF CommandButton があります。クリック後にボタンのコンテキストが変化するフォームを見てきました (ボタンのラベルが変化し、処理が完了するまでボタンが無効になります)。

私はICEFacesを使用しており、基礎となるページコードで無効なプロパティをブール値に設定しています。

ボタンにバインドされたアクションリスナーは、そのブール値を変更して無効にしますが、残念ながら、JSP には変更がありません。

誰?

4

5 に答える 5

5

できることは、Javascript を使用してボタンのステータスを変更することです。

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



コメントに関する編集:

前のコードがフォームを送信しない場合は、クリック自体ではなく、クリックの少し後にボタンを無効にする必要があります。次のコードを使用してそれを行うことができます。

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

thisキーワードを setTimeout メソッドで直接使用するという事実が正しく機能するかどうかはわかりません。そうでない場合は、別の方法を使用してそれを行うことができます。

<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

javascript submit(); を実行します。最初にボタンを無効にしてから

于 2010-10-11T10:44:23.943 に答える
1

h:commandButton の代わりに ice:commandButton を使用する必要があります。これには、AJAX 呼び出しとしてアクションを実行する partialSubmit プロパティがあるためです。これによりボタンの状態が更新されるため、サーバーのプロパティが false に設定されている場合は、ボタンを無効にする必要があります。

于 2009-09-18T22:28:08.100 に答える
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 に答える