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


















