2009-08-13 67 views
0

我面臨着一個問題Icefaces和它的JavaScript橋。 我不知道在我對服務器端進行更改後,由這個橋所做的更改是什麼。Icefaces和JavaScript橋

例如:我有一個冰:在我的網頁與可視屬性= 「#{} bean.customPopUp」 panelPopup組件。如果我將「bean.customPopUp」改爲「true」,彈出窗口顯示正確,但我需要知道:客戶端發生了什麼,換句話說,我需要知道彈出窗口是否顯示我需要做一些客戶端處理使用javascript

+0

我不確定如果我正確理解你的問題,但如果你想知道ICEfaces是否需要JavaScript,那麼答案是肯定的。這些「部分刷新」需要客戶端上的JavaScript來修改DOM。 無論如何,你能否更準確地說明你需要了解ICEfaces的JavaScript橋樑? – 2009-08-14 18:47:22

+0

謝謝你對我英語不好。 我使用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

回答

0

我一直在試圖找到組件級回調的解決方案也。似乎沒有解決這個問題的好辦法。我試圖在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();"); 

我不喜歡這種解決方案非常多,但似乎並沒有在這個時候任何偉大的答案。