2009-08-06 16 views
2

これはかなり簡単なはずですが、私はそれを感じていないようです。JSFのcommandButtonを無効にする

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

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

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

誰でも?

答えて

4

何ができることはJavascriptを使用して、ボタンの状態を変更することです:コメントに関する

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



編集:

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

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

私はわからないんだけど、実際には正しく動作しますsetTimeoutメソッドに直接このキーワードを使用している場合。次のJavaScript機能を

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

:いない場合、あなたはそれを行うための別の方法を使用することができます

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

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

(私はこのように、このコードを向上させることができると確信している)

+0

と悲しげに、ICEfacesをして、このアプローチは動作しません。それは実際にそれを全く提出することを不可能にする。私はonMouseUpをやってみましたが、それは最初のクリックの後にそれを無効にします... –

+0

そして私の新しい反応はどうですか? – romaintaz

+0

無効にした後でボタンを有効にすることはできますか? –

1

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

+0

+1は、OPが優雅な方法で問題を解決するために使用しているフレームワークを利用しています。 – SplinterReality

1

javascript submit(); JavaScript関数を使用して

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

:最初にしてFirefoxの具体的な解決策についてはromaintaz

からの解決策は、以下の作品(それはIEでは動作しません)と同様にボタン

1

を無効にします:

function disableButton(buttonId) { 

    var obj = document.getElementById(buttonId); 

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

    } 
} 
0

icefacesがDOMを更新した後に行います。あなたは​​を使用することができます。ここでは

を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"); 
    } 
} 
関連する問題