<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

    搜索

    •  

    積分與排名

    • 積分 - 825447
    • 排名 - 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 閱讀(2523) 評論(0)  編輯  收藏 所屬分類: struts 2
    主站蜘蛛池模板: a级毛片黄免费a级毛片| 亚洲乱码日产精品一二三| 亚洲国产欧洲综合997久久| 桃子视频在线观看高清免费完整| 国产亚洲欧洲Aⅴ综合一区 | 免费a级毛片大学生免费观看| 亚洲av产在线精品亚洲第一站| 91热久久免费精品99| 4444亚洲国产成人精品| 最近中文字幕完整免费视频ww| 亚洲视频一区二区三区| 青娱乐免费在线视频| 亚洲一区二区三区国产精华液| 狼人大香伊蕉国产WWW亚洲| 国产成人高清精品免费鸭子| 亚洲AV无码成人精品区天堂| 亚洲丰满熟女一区二区v| 无码人妻一区二区三区免费手机 | 无码毛片一区二区三区视频免费播放| 免费国产真实迷j在线观看| 免费无码婬片aaa直播表情| 亚洲综合无码AV一区二区| 色在线亚洲视频www| 国产一区二区三区在线免费| 亚洲欧洲日本天天堂在线观看| 黑人粗长大战亚洲女2021国产精品成人免费视频| 最近最新中文字幕完整版免费高清 | 国产精品免费看久久久香蕉| 亚洲人成色7777在线观看| 精品熟女少妇av免费久久| 亚洲综合精品伊人久久| 亚洲裸男gv网站| 99在线免费观看视频| 国产av无码专区亚洲国产精品| a级黄色毛片免费播放视频| 精品无码一区二区三区亚洲桃色 | 美女视频黄的免费视频网页| jlzzjlzz亚洲乱熟在线播放| a毛片免费全部播放完整成| 亚洲狠狠狠一区二区三区| 日本黄色免费观看|