您好,登錄后才能下訂單哦!
實質上,上載組件或者生成一個完整的自已,或者在一個AJAX請求的情況下,只生成部分XML以更新在頁面上進度條的狀態。為了防止JavaServer Faces生成完整的組件樹(這會帶來不必要的負荷),我們還需要實現一個PhaseListener(PagePhaseListener)以取消該faces的請求處理的其它部分-如果遇到一個AJAX請求的話。我在本文中略去了所有的關于標準配置(faces-config.xml和標簽庫)的討論,因為它們相當直接且已經在以前討論過;而且這一切都包含在隨同本文的源碼中,你可以詳細分析。
(一) AJAX文件上傳組件生成器
該組件和標簽類的實現比較簡單。大量的邏輯被包含到生成器中,具體地說,它負責以下:
• 編碼整個的上傳組件(和完整的HTML文件上傳標簽)、文件被上傳完成后要顯示的組件,還有實現AJAX請求的客戶端JavaScript代碼。
• 適當地處理部分AJAX請求并且發送回必要的XML。
• 解碼一個文件上傳并且把它設置為一個FileItem實例。
(二) 編碼整個上傳組件
前面已經提及,文件上傳組件由三個階段組成。在該組件的整個編碼期間,我們將詳細分析這三個階段的編碼。注意,在頁面上的該組件的可視化(使用CSS顯示)屬性將由AJAX JavaScript來控制。
(三) 階段一
圖5顯示了該上傳組件的第一個階段。
498)this.style.width=498;" border="0" />
圖5.選擇文件上傳
在第一階段中,我們需要生成HTML文件Upload標簽和點擊Upload按鈕時相應的執行代碼。一旦用戶點擊了Upload按鈕,表單將被一個IFRAME(為防止頁面阻塞)提交并初始化第二個階段。下面是生成代碼的一部分:
|
(四) 階段二
第二階段是顯示當前百分比的進度條和標簽,如圖6所示。該進度條是作為一個具有100個內嵌span標簽的div標簽實現的。這些將由AJAX JavaScript根據來自于服務器的響應進行設置。
498)this.style.width=498;" border="0" />
圖6.上傳文件到服務器
writer.startElement("div",component); input.getClientId(context) + "_stage2", "id"); component.getClientId(context) + "_progressBarlabel"; |
(五) 階段三
最后,作為階段三,一旦文件成功上傳,需要被顯示的組件即被生成,見圖7。這些是在生成器的encodeChildren方法中實現的。
498)this.style.width=498;" border="0" />
圖7.上傳完成
public void encodeChildren(FacesContext context, |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。