JSF實(shí)現(xiàn)文件上傳
目前 JSF 對于檔案上傳的支持很差,JSC 內(nèi)更是缺少檔案上傳的組件
除非使用 Orcale ADF 的組件,但是 Oracle ADF 并非免費(fèi)的。
本篇文章主要就是跟大家分享如何在 JSF 內(nèi)使用免費(fèi)的 Jakarta Commons FileUpload (http://jakarta.apache.org/commons/fileupload/ ) 組件來實(shí)作檔案上傳功能。
有幾點(diǎn)注意事項(xiàng),這邊必須先要提出的:
1. Servlet 部分改自本討論區(qū) JiaYun 大大的「檔案上傳 JSP 小范例」,希望他不會介意!^^" (如果需要更清楚的 Jakarta Commons FileUpload 范例,那篇文章
會是更好的選擇。)
2. 檔案上傳,必須把 form 的 enctype 更改如下:
<h:form binding="#{AttachFile.form1}" enctype="multipart/form-data" id="form1"> |
但是以上的 JSF 標(biāo)簽 compile 都會正常,但是在這個(gè) form 里面,其它組件的 action 都會無法正常觸發(fā)。所以這邊僅使用一般的 JSP 頁面。
3. 這篇獻(xiàn)丑的教學(xué)其實(shí)是使用 JSF(其它頁面) -> JSP(選擇檔案頁面) -> Servlet(儲存使用者上傳的檔案) -> JSF(其它頁面) 的流程。
說穿了,只是使用舊的 JSP + Servlet 技術(shù),請各位高手海涵。
流程一(選擇檔案的 JSP 頁面):
<f:verbatim> <form action="UploadFile" enctype="multipart/form-data" method="post"> File:<input name="txtFile" type="file"/><br/> Description:<input name="txtDesc" type="text"/><br/> <input type="checkbox" name="chkAdd"/>Add another file<br/> <input style="height: 27px; left: 0px; top: 96px; position: absolute; width: 72px" type="submit" value="Add"/> <input style="height: 27px; left: 96px; top: 96px; position: absolute; width: 72px" type="submit" value="Cancel"/> </form> </f:verbatim> <h:form binding="#{AttachFile.form1}" id="form1"/> |
1. 這個(gè)頁面包含:
一個(gè) type="file" 的 textbox
一個(gè)一般的 textbox 提供為輸入檔案描述
一個(gè) checkbox,提供多重上傳檔案
一個(gè) Add 及一個(gè) Cancel 的 Button
2. 如果使用者選取 checkBox,在后面的 Servlet 處理完,則回到這一頁 ,選擇另一個(gè)上傳的檔案。 如果沒有勾選,則前進(jìn)到其它的 JSF 頁面。
3. UploadFile 為后面要處理檔案儲存的 Servlet 名稱。
4. 以上只寫出修改的地方,其它 JSF 預(yù)設(shè)的 tag 就不寫出來了。
流程二(web.xml):
<servlet> <servlet-name>Upload_File</servlet-name> <servlet-class>webapplication1.UploadFile</servlet-class> </servlet> <servlet-mapping> <servlet-name>Upload_File</servlet-name> <url-pattern>/UploadFile</url-pattern> </servlet-mapping> |
2. 這段大致的意義為:當(dāng)你向 server 要求 /UploadFile 這個(gè) URL 時(shí), server 會使用 webapplication1.UploadFile 這個(gè) servlet 來處理你的要求。
流程三(后端處理檔案的 Servlet):
UploadFile import java.io.*; import java.util.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; import org.apache.commons.fileupload.*;
public class UploadFile extends HttpServlet{ try { //--Delete-- |
2. 最后的 servletResponse.sendRedirect 會根據(jù)前面的 JSP 頁面,是否有勾選 chkAdd 來決定是要回到前面的 JSP 頁面來繼續(xù)新增檔案,或是前往其它 JSF 頁面。
3. 請注意 faces/Schedule.jsp 前面的 faces ,如果不加可能可會出現(xiàn) Cannot find FacesContext 的錯誤。
posted on 2008-10-24 10:16 找個(gè)美女做老婆 閱讀(3181) 評論(0) 編輯 收藏