選擇框更新并進(jìn)一步查看 JSP 標(biāo)記語(yǔ)法
現(xiàn)在,讓我們來(lái)看看這個(gè)應(yīng)用程序?yàn)槟瓿伤腥蝿?wù)的那些內(nèi)容:AjaxTags JSP 標(biāo)記庫(kù)的實(shí)際使用。清單 4 取自同一個(gè)文件(dropdown.jsp):
清單 4. AjaxTag JSP 標(biāo)記庫(kù)示例:ajax:select 標(biāo)記
<ajax:select baseUrl="${contextPath}/dropdown.view" source="make" target="model" parameters="make={make}" preFunction="initProgress" emptyOptionName="Select model" postFunction="resetProgress" errorFunction="reportError" />
在仔細(xì)研讀清單 4 中的大塊代碼之前,請(qǐng)注意這段代碼:${contextPath}。要消除混淆,需要指出這實(shí)際是一個(gè)使用 EL(表達(dá)式語(yǔ)言)進(jìn)行的變量設(shè)置,在 header.jsp 中定義,如清單 5 所示:
清單 5. header.jsp 中的 contextPath 變量定義
<c:set var="contextPath" scope="request"> ${pageContext.request.contextPath}</c:set>
我著重提到它,是為了讓您能夠清楚地看到 ${contextPath} 變量是如何被解析的。如果用 Java 編寫(xiě),則其值會(huì)是 pageContext.getRequest().getContextPath() 的對(duì)等物;谖业呐渲,${contextPath} 變量將是 http://localhost:8080/ajaxtags-1.3-beta-rc6-1 的值。
現(xiàn)在,再回到 清單 4,注意到為了向服務(wù)器進(jìn)行異步回調(diào),您必須要知道這個(gè)請(qǐng)求的 URL。AjaxTag 需要這個(gè) baseUrl 參數(shù),它是 ID 為 make 的選擇框發(fā)生更改事件時(shí)所需異步請(qǐng)求的那個(gè) URL。
知道了 ${contextPath} 的值后,就可以看到將要請(qǐng)求的 baseUrl 為 http://localhost:8080/ajaxtags-1.3-beta-rc6-1/dropdown.view。
baseUrl 后面還有 source 和 target。這些參數(shù)代表了所處理的 HTML 元素的 ID。在本例中,處理了兩個(gè)選擇框:一個(gè)包含汽車制造商,另一個(gè)包含汽車模型。包含汽車制造商的選擇框是源,包含汽車模型的選擇框則是目標(biāo)。
parameters 參數(shù)(請(qǐng)參見(jiàn) 清單 6)表示的是應(yīng)該傳遞到被請(qǐng)求 URL 的一些額外參數(shù):
清單 6. parameters 參數(shù)
parameters="make={make}"
請(qǐng)注意花括號(hào)內(nèi)的語(yǔ)法為 make={make}。這就表明要將 make 的參數(shù)鍵追加到這個(gè)正被異步請(qǐng)求的 URL,而且作為數(shù)值,傳遞在相應(yīng)的指定 HTML 元素中找到的值(基于 ID)。所以在這個(gè)示例中,后臺(tái)的 JavaScript 將會(huì)用 make 的 ID 來(lái)獲得這個(gè) HTML 元素、獲得該元素的值并將其作為 HTTP 請(qǐng)求的一部分傳遞。這聽(tīng)起來(lái)比實(shí)際的情況更容易讓人混淆,所以讓我們來(lái)看看最后的這個(gè) URL,此 URL 在選擇第一個(gè)選擇框的內(nèi)容時(shí)被請(qǐng)求(請(qǐng)參見(jiàn) 清單 7):
清單 7. 當(dāng)用戶從第一個(gè)選擇框中選擇 “Mazda” 時(shí),所請(qǐng)求的 URL
http://localhost:8080/ajaxtags-1.3-beta-rc6-1/dropdown.view?make=Mazda
可以看到已經(jīng)有一個(gè)參數(shù)被添加在 URL 的末尾,參數(shù)鍵是 make,而參數(shù)的值為 Mazda。
ajax:select 參數(shù) preFunction、postFunction 和 errorFunction 是所編寫(xiě)的定制 JavaScript 函數(shù)的名稱,這些函數(shù)在時(shí)間或條件合適時(shí)調(diào)用。在本例中,命名的方式很明顯。preFunction 在 Ajax 請(qǐng)求之前執(zhí)行;postFunction 在 Ajax 請(qǐng)求完成且收到響應(yīng)之后執(zhí)行,errorFunction 在出現(xiàn)問(wèn)題(比如請(qǐng)求返回了 500 內(nèi)部服務(wù)器錯(cuò)誤或資源不存在消息等等)時(shí)執(zhí)行。
最后一個(gè)參數(shù) emptyOptionName 是選項(xiàng)的值,這個(gè)選項(xiàng)顯示沒(méi)有做出某個(gè)選擇。在本例中,恢復(fù)默認(rèn)狀態(tài)。
出處:IBM developerWorks
責(zé)任編輯:moby
上一頁(yè) 用 AjaxTags 簡(jiǎn)化 Ajax 開(kāi)發(fā) [3] 下一頁(yè) 用 AjaxTags 簡(jiǎn)化 Ajax 開(kāi)發(fā) [5]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|