我一直在試圖找到組件級回調的解決方案也。似乎沒有解決這個問題的好辦法。我試圖在Javascript中啓動一個遞歸輪詢函數,它在檢測到我的組件更新後處理我的任務。我的支持bean啓動輪詢器()並每隔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,那麼答案是肯定的。這些「部分刷新」需要客戶端上的JavaScript來修改DOM。 無論如何,你能否更準確地說明你需要了解ICEfaces的JavaScript橋樑? – 2009-08-14 18:47:22
謝謝你對我英語不好。 我使用ice:panelPopup,我需要知道這個彈出窗口顯示的時間。我需要任何標誌或提示告訴我,因爲我需要在彈出窗口後顯示一些JS。 我使用Ice.onSendReceive,但它在彈出窗口顯示之前觸發。我試過: Ice.onSendReceive('document:body', window.setTimeout(「detectPopUp()」,1000); }); detectPopUp():使用它的ID來獲取彈出窗口。 但我認爲這不是一個完美的方式,每次都不工作。 我試過 JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(),「detectPopUp()」); 在我的豆,但沒有工作。 那該怎麼辦 – Saeed 2009-08-15 14:28:12