JSF2中Ajax事件和錯誤
JSF2的Ajax支持包含一個非常基本的功能以聽取JSF2客戶端處理代碼中的事件和錯誤。它假設該功能會被部分開發員使用以監視事件,例如,當出現一個明顯的Ajax請求時,圖像會變成黃色,而沒有這樣的Ajax請求時則是黑色。本文將嘗試解決JSF2中的Ajax事件和錯誤。
閑話少說,以下就是從Mojarra的Ajax樣本中截取的一部分代碼:
在出現Ajax調用的頁面,我們會有以下域:
- < h3> Status:< /h3>
- < textarea id="statusArea" cols="40" rows="10" readonly="readonly" />
一個簡單的文本區域,甚至都沒有引入后端服務器數據模型。
然后,在我們的javascript中我們會看到這樣的代碼:
- var statusUpdate = function statusUpdate(data) {
- var statusArea = document.getElementById("statusArea");
- var text = statusArea.value;
- texttext = text + "Name: "+data.source.id;
- if (data.type === "event") {
- texttext = text +" Event: "+data.name+"\n";
- }
- else { // otherwise, it's an error
- texttext = text + " Error: "+data.name+"\n";
- }
- statusArea.value = text;
- };
- // Setup the statusUpdate function to hear all events on the page
- jsf.ajax.addOnEvent(statusUpdate);
- jsf.ajax.addOnError(statusUpdate);
運行代碼的時候,你會看到一組數據流向頁面其他地方出現的Ajax事件和錯誤一樣通過文本區域。嘗試樣本代碼可以看到更多。
到底發生了什么:首先,我們定義了一個JavaScript函數,將其設置為可變量,然后調用兩個JSF Ajax 應用程序接口函數:assOnEvent和assOnError。這些函數使用statusUpdate函數作為其回調,作為第一個參數傳送數據對象。
該數據對象,就事件而言,存在三個命名的事件:開始,完成以及成功。
◆開始——在請求被發送前就發生了。
◆完成——一旦請求完成,且還未調用javax.faces.response前發生。
◆成功——在響應方法結束后發生
這意味著對于一般的請求,這三項事件都會被調用,而如果出現某種錯誤,那么就只有開始和完成兩項事件會被調用。而就錯誤而言,有四種可能的命名錯誤:
◆httpError——如果客戶接收到任何HTTP狀態不是200到299中間的任何數就會出現這一錯誤。
◆emptyResponse——當連接被放棄而沒有出現任何響應的時候發生。
◆malformedXML——這意味著接收到的XML不能被正確地分析。
◆serverError——當錯誤在服務器上生成且被傳送回客戶端時出現這一錯誤。
數據有效負載包括:
◆類型——事件或錯誤之一。
◆名稱——Ajax事件和錯誤名稱,如上所述。
◆源——觸發事件的DOM要素。
◆對于那些稱為serverError的錯誤,也存在一個errorName和errorMessage域,目的是為了發送并完成服務器錯誤。
◆附加的responseCode,responseXML和responseTxt,作為XMLHttpResponse對象。
因此,你什么時候需要使用這一功能呢?可能不會經常使用。但是由于它沒有在任何其他其他留下記載,筆者希望能對其作出一些描述。
【編輯推薦】