<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 6  文章 - 129  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(14)

    隨筆檔案(6)

    文章分類(467)

    文章檔案(423)

    相冊

    收藏夾(18)

    JAVA

    搜索

    •  

    積分與排名

    • 積分 - 826090
    • 排名 - 49

    最新評論

    閱讀排行榜

    評論排行榜

    在Struts2中實現文件上傳(二)

     發布者:[IT電子教育門戶]   

    發布運行應用程序,在瀏覽器地址欄中鍵入:http://localhost:8080/Struts2_Fileupload/FileUpload.jsp,出現圖示頁面:

     
    清單7 FileUpload頁面

    選擇圖片文件,填寫Caption并按下Submit按鈕提交,出現圖示頁面:

     
    清單8 上傳成功頁面

    更多配置
    在運行上述例子,如果您留心一點的話,應該會發現服務器控制臺有如下輸出:

    Mar 20 , 2007 4 : 08 : 43 PM org.apache.struts2.dispatcher.Dispatcher getSaveDir
    INFO: Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir
    Mar 20 , 2007 4 : 08 : 43 PM org.apache.struts2.interceptor.FileUploadInterceptor intercept
    INFO: Removing file myFile C:\Program Files\Tomcat 5.5 \work\Catalina\localhost\Struts2_Fileupload\upload_251447c2_1116e355841__7ff7_00000006.tmp 清單9 服務器控制臺輸出
    上述信息告訴我們,struts.multipart.saveDir沒有配置。struts.multipart.saveDir用于指定存放臨時文件的文件夾,該配置寫在struts.properties文件中。例如,如果在struts.properties文件加入如下代碼:

    struts.multipart.saveDir = /tmp 清單10 struts配置
    這樣上傳的文件就會臨時保存到你根目錄下的tmp文件夾中(一般為c:\tmp),如果此文件夾不存在,Struts 2會自動創建一個。

    錯誤處理
    上述例子實現的圖片上傳的功能,所以應該阻止用戶上傳非圖片類型的文件。在Struts 2中如何實現這點呢?其實這也很簡單,對上述例子作如下修改即可。

    首先修改FileUpload.jsp,在<body>與<s:form>之間加入“<s:fielderror />”,用于在頁面上輸出錯誤信息。

    然后修改struts.xml文件,將Action fileUpload的定義改為如下所示:

            < action name ="fileUpload" class ="tutorial.FileUploadAction" >
                < interceptor-ref name ="fileUpload" >
                    < param name ="allowedTypes" >
                        image/bmp,image/png,image/gif,image/jpeg
                    </ param >
                </ interceptor-ref >
                < interceptor-ref name ="defaultStack" />           
                < result name ="input" > /FileUpload.jsp </ result >
                < result name ="success" > /ShowUpload.jsp </ result >
            </ action > 清單11 修改后的配置文件
    顯而易見,起作用就是fileUpload攔截器的allowTypes參數。另外,配置還引入defaultStack它會幫我們添加驗證等功能,所以在出錯之后會跳轉到名稱為“input”的結果,也即是FileUpload.jsp。

    發布運行應用程序,出錯時,頁面如下圖所示:

     
    清單12 出錯提示頁面

    上面的出錯提示是Struts 2默認的,大多數情況下,我們都需要自定義和國際化這些信息。通過在全局的國際資源文件中加入“struts.messages.error.content.type.not.allowed=The file you uploaded is not a image”,可以實現以上提及的需求。對此有疑問的朋友可以參考我之前的文章《在Struts 2.0中國際化(i18n)您的應用程序》。

    實現之后的出錯頁面如下圖所示:

     
    清單13 自定義出錯提示頁面

    同樣的做法,你可以使用參數“maximumSize”來限制上傳文件的大小,它對應的字符資源名為:“struts.messages.error.file.too.large”。

    字符資源“struts.messages.error.uploading”用提示一般的上傳出錯信息。

    多文件上傳
    與單文件上傳相似,Struts 2實現多文件上傳也很簡單。你可以將多個<s:file />綁定Action的數組或列表。如下例所示。

    < s:form action ="doMultipleUploadUsingList" method ="POST" enctype ="multipart/form-data" >
        < s:file label ="File (1)" name ="upload" />
        < s:file label ="File (2)" name ="upload" />
        < s:file label ="FIle (3)" name ="upload" />
        < s:submit />
    </ s:form > 清單14 多文件上傳JSP代碼片段
    如果你希望綁定到數組,Action的代碼應類似:

         private File[] uploads;
         private String[] uploadFileNames;
         private String[] uploadContentTypes;

         public File[] getUpload()  { return this .uploads; }
          public void setUpload(File[] upload)  { this .uploads = upload; }
     
          public String[] getUploadFileName()  { return this .uploadFileNames; }
          public void setUploadFileName(String[] uploadFileName)  { this .uploadFileNames = uploadFileName; }
     
          public String[] getUploadContentType()  { return this .uploadContentTypes; }
          public void setUploadContentType(String[] uploadContentType)  { this .uploadContentTypes = uploadContentType; } 清單15 多文件上傳數組綁定Action代碼片段
    如果你想綁定到列表,則應類似:

         private List < File > uploads = new ArrayList < File > ();
         private List < String > uploadFileNames = new ArrayList < String > ();
         private List < String > uploadContentTypes = new ArrayList < String > ();

         public List < File > getUpload()  {
             return this .uploads;
        }
          public void setUpload(List < File > uploads)  {
             this .uploads = uploads;
        }
     
          public List < String > getUploadFileName()  {
             return this .uploadFileNames;
        }
          public void setUploadFileName(List < String > uploadFileNames)  {
             this .uploadFileNames = uploadFileNames;
        }
     
          public List < String > getUploadContentType()  {
             return this .uploadContentTypes;
        }
          public void setUploadContentType(List < String > contentTypes)  {
             this .uploadContentTypes = contentTypes;
        } 清單16 多文件上傳列表綁定Action代碼片段
    總結
    在Struts 2中實現文件上傳的確是輕而易舉,您要做的只是使用<s:file />與Action的屬性綁定。這又一次有力地證明了Struts 2的簡單易用。



    posted on 2007-09-19 22:14 Ke 閱讀(2525) 評論(0)  編輯  收藏 所屬分類: struts 2
    主站蜘蛛池模板: 亚洲国产成+人+综合| 亚洲色偷偷av男人的天堂| 欧美亚洲国产SUV| 在线观看免费为成年视频| 亚洲综合偷自成人网第页色| 午夜福利不卡片在线播放免费| 亚洲精品美女在线观看播放| 麻豆高清免费国产一区| 亚洲福利一区二区| 亚洲第一成年免费网站| 亚洲AV成人无码网站| 免费又黄又爽的视频| 国产在线观a免费观看| 亚洲精品国产精品乱码视色 | 国产伦精品一区二区免费| 中文字幕亚洲综合久久菠萝蜜| 中国一级毛片视频免费看| 亚洲va在线va天堂va不卡下载| 免费A级毛片无码视频| 久久亚洲AV无码精品色午夜| 人妻视频一区二区三区免费| 噜噜综合亚洲AV中文无码| 亚洲一区二区三区乱码A| 男人天堂免费视频| 亚洲大尺码专区影院| 日韩一区二区三区免费体验| 香蕉国产在线观看免费| 亚洲国产综合91精品麻豆| 日本精品人妻无码免费大全| 男人和女人高潮免费网站| 亚洲AV无码专区在线播放中文| 97视频免费在线| 特级毛片aaaa级毛片免费| 亚洲s色大片在线观看| 国产一卡2卡3卡4卡无卡免费视频| 久久亚洲色WWW成人欧美| 亚洲人成影院在线无码按摩店 | 在线观看免费为成年视频| 亚州**色毛片免费观看| 亚洲综合色一区二区三区小说| 四虎永久在线精品免费影视|