ADF 客戶端代碼調用服務器方法

目標:如何在客戶端調用JS代碼,並調用生成的bean裏的函數服務器

步驟一:首先要給要加載的控件添加控件clientListener,而後添加serverListener,要調用這兩個監聽器,必定要將被夾在的控件的clientComponent置爲true,不然沒法調用監聽器。函數

eg:學習

<af:commandButton text="commandButton 1" clientComponent="true">server

<af:clientListener method="dbClickTable" type="action"/>對象

<af:serverListener type="dbClickServer" method="#{backingBeanScope.EmployeeTable.dbClickTo}"/>生命週期

</af:commandButton>事件

其中clientListener中的method爲在JS文件中添加的JavaScript函數名稱,type爲操做方式。ip

serverListener中的type是用來定義給客戶端的,客戶端經過定義的type來通知服務器端,服務器端監聽到這個事件後調用managerBean裏的函數。get

在JavaScript裏面添加了以下的代碼:io

function dbClickTable(event){

             var source = event.getSource();

            AdfCustomEvent.queue(source,"dbClickServer",{},true);

}

其中的event是從頁面獲取的事件,經過getSource()函數頁面的事件對象,其中AdfCustomEvent.queue函數中的第二個參數是serverListener中定義的類型,經過這個來通知服務器端調用managerBean裏的函數。在這裏總結了一下clientListener和serverListener是如何工做的:當觸發一個事件的時候(如用鼠標點擊按鈕),客戶端監聽器腳本啓動,腳本首先調用AdfCustomEvent.queue()方法,方法裏的一個事件被啓動,這個事件就是服務器端定義的type,服務器端監聽到這個事件後,執行與其關聯的bean方法。

在學習的過程當中遇到過一個問題,就是在使用clientListener的時候,類型定義的問題,就是對於不一樣的被加載的控件,所使用的clientListener的類型有要求,譬如對command類型的控件,類型能夠定義爲action,可是若是定義成click的時候,在調用JS代碼的時候,沒法經過getSource獲取頁面的事件對象,剛開始的時候試了幾回都沒有成功,後來查了資料,想了一下,這大概適合每一個控件的生命週期有關係,不一樣的控件的生命週期不同,由於action能夠用於全部的command控件,而click只是用於用戶點擊一個控件的時候。

相關文章
相關標籤/搜索