2011-04-06 101 views
1

我在使用MyFaces 1.1 + Tomahawk + ​​Ajax4JSF進行長項目後使用Myfaces 2.0。 2.0絕對是一個巨大的改進。雖然我似乎無法獲得onload JavaScript的工作。我在我的腦海堅持這一點:JSF 2.0 javascript onload/oncomplete

​​

但不執行。我看了一下源myfacecs JS,我注意到他們做了一些onload的東西。沒有太多細節,但它似乎阻止我的重載onload事件的企圖。有沒有其他解決方法,可能是直接調用JSF庫?

另一個問題,關於同一主題。 Ajax4JSF有一個屬性「oncomplete」,它可以讓你在Ajax請求完成後運行一些Javascript。在MyFaces 2.0中有與f:ajax相同的東西嗎?來想一想,我還沒有嘗試event =「oncomplete」,也許它會工作。

+0

爲HTML你明白這是迷上了的onLoad()任何其他方法>? – 2011-04-06 17:07:17

回答

4

好吧,我想通了。

在加載頁面的頂部後來被重寫

如果我在它覆蓋的onload頁面結束加載腳本的劇本,但它也打破了JSF機制。所以更好的解決方案是用戶JSF的onload事情,並將腳本放在頁面的末尾。在深入挖掘JSF源代碼後,我發現了這個函數。

<script type="text/javascript"> 
     myfaces._impl.core._Runtime.addOnLoad(window, checkDownloadFile); 
</script> 

當然,我必須定義checkDownloadFile它做什麼我在原來的職位。

我也想出了不完整的。 f:ajax標籤有一個叫做3次的onevent屬性。執行前一次,之後兩次。我相信在完成請求後立即執行一次,然後在更新頁面組件後再次執行。回調函數接受一個具有狀態的事件參數。因此,在您的回調函數中,您可以檢查狀態以決定是否執行某些操作。狀態是開始,完成和成功。所以對於我來說,我有:

<f:ajax execute="userManagementForm" event="click" onevent="myEvent" render="userManagementForm:results userManagementForm:workarea userManagementForm:fileDownload" /> 

然後腳本:

function myEvent(e) { 
     if (e.status == 'success') { 
      checkDownloadFile(); 
     } 
    }