私はコンポーネントレベルのコールバックの解決法も探しています。この問題に対する良い解決策はないようです。私は自分のコンポーネントへの更新を検出した後に自分のタスクを処理するJavascriptで再帰ポーリング機能を開始することに頼ってきました。私のバッキングBeanはpoller()を起動し、コンポーネントの更新が発生するまで500msごとに実行されます。
var pollingCount = 0;
var previousValue;
function poller() {
// Kill poller after 30 seconds
if (pollingCount >= 60) {
pollingCount = 0;
return;
}
var currentValue = document.getElementById('myInputElement').value;
if (previousValue != currentValue) {
previousValue = currentValue;
pollingCount = 0;
myFunction();
}
else {
pollingCount++;
setTimeout('poller()', 500);
}
}
私のバッキングBean:
updateDataModel(); // Causes 'myInputElement' component to update
FacesContext fc = FacesContext.getCurrentInstance();
JavascriptContext.addJavascriptCall(fc, "poller();");
を私は非常にこのソリューションを好きではないが、この時点ですべての偉大な答えがあるように表示されません。
私はあなたの質問を正しく理解しているかどうかはわかりませんが、ICEfacesにJavaScriptが必要かどうかを知りたければ、答えは間違いなくはいです。これらの「部分リフレッシュ」では、DOMを変更するためにクライアント側でJavaScriptが必要です。 とにかく、ICEfacesのJavaScriptブリッジについてもっと知りたいことを述べてください。 –
私の悪い英語をありがとう&ごめんなさい。 私はice:panelPopupを使用します。このポップアップがいつ表示されるかを知る必要があります。私はポップアップが表示された後にいくつかのJSをする必要があるので、私にそれを伝えるためのフラグやヒントが必要です。 Ice.onSendReceiveを使用しますが、ポップアップが表示される前に起動します。 私は試しました: Ice.onSendReceive( 'document:body'、 window.setTimeout( "detectPopUp()"、1000); }); detectPopUp():IDを使用してポップアップを取得します。 しかし、私はそれが完璧な方法ではないと思うし、毎回動作しません。 私は試しました JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance()、 "detectPopUp()");私の豆の中で が働いていません。 どうすればいいですか – Saeed