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

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

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

    Dev Zone
    偏執狂才能生存,人生/事業的路上需要再堅持一下
    但是又怎么說得清堅持的結果,道得盡堅持的含義
         發現一個問題,使用struts進行文件上傳,如果有些參數沒有完全定義在ActionForm中,需要從request.getParameter獲取,在表單提交并且validate失敗返回input頁面時,這部分需要從request.getPrameter獲取的參數數據都丟失了,即使再對request進行multipart解析也不能得到。

         經過分析,發現struts的ActionServlet在接收到multipart請求之后,在RequestProcessor中會對request進行封裝:MultiRequestWrapper,然后在Action執行完之后,又將已經封裝的request重新還原。以下是部分代碼,截直RequestProcessor:

    封裝:
        protected HttpServletRequest processMultipart(HttpServletRequest request) {

            
    if (!"POST".equalsIgnoreCase(request.getMethod())) {
                
    return (request);
            }

            
            String contentType 
    = request.getContentType();
            
    if ((contentType != null&&
                contentType.startsWith(
    "multipart/form-data")) {
                
    return (new MultipartRequestWrapper(request));
            }
     else {
                
    return (request);
            }


        }

    還原:
       在doForward和doInclude中在forward和include之前都執行了下面的代碼:
            if (request instanceof MultipartRequestWrapper) {
                request 
    = ((MultipartRequestWrapper) request).getRequest();
            }


         問題就出現在這兒。在經過測試之后,發現request只能進行一次multipart解析,這或許和解析request的時候調用了request.inputStream有關,第一次調用之后再調用就不能獲取其中的有效內容了。因此發現request在調用CommonsMultipartRequestHandler.handleRequest進行解析后并還原后,調用common-upload對request進行解析已經得不到任何得提交內容了,因此當Form驗證失敗,返回input頁面時,即使再進行multpart解析,也不能通過request.getPrameter取到你想要的數據。而此時,表單中的數據卻不會丟失(定義在ActionForm中的表單域),這是因為struts的html系列tag在redisplay時值都是從ActionForm獲取的。

           在將RequestProcessor.doForward和doInclude中還原request的語句注釋后,問題得到了解決。到目前還不清楚為什么struts要還原request,難道是因為chain的原因?

           webwork中應該不會出現這個問題,因為webwork中無論ServletDispatcher還是FilterDispatcher在對request wrap之后都沒有再還原。
    posted on 2006-03-15 06:10 dev 閱讀(3944) 評論(1)  編輯  收藏 所屬分類: 設計/開發
    Comments
    • # re: struts上傳文件,驗證失敗表單數據丟失的原因
      keith
      Posted @ 2006-03-15 10:15
      關注這個問題  回復  更多評論   
     
    主站蜘蛛池模板: 久热综合在线亚洲精品| 东北美女野外bbwbbw免费| 国产偷国产偷亚洲高清人| 国产性生大片免费观看性| 人成午夜免费视频在线观看| 亚洲女同成av人片在线观看| 亚洲电影国产一区| 亚洲风情亚Aⅴ在线发布| a毛片免费观看完整| 女性无套免费网站在线看| 亚洲午夜国产精品无码老牛影视 | 久久综合日韩亚洲精品色| 亚洲欧美国产国产综合一区| 91在线视频免费观看| 日韩成人免费在线| 亚洲av日韩av无码黑人| 理论秋霞在线看免费| 久久久久国色AV免费看图片| 亚洲AV福利天堂一区二区三 | 日韩在线视频免费| 99在线观看免费视频| 亚洲成?v人片天堂网无码| 亚洲深深色噜噜狠狠网站| 无码人妻丰满熟妇区免费| 亚洲&#228;v永久无码精品天堂久久| 日韩精品亚洲人成在线观看| 一出一进一爽一粗一大视频免费的 | 中文字幕a∨在线乱码免费看| 日本免费人成视频播放| 亚洲黄色在线电影| 最近更新免费中文字幕大全| 免费乱理伦在线播放| 亚洲AV日韩AV一区二区三曲 | 免费人成在线观看网站品爱网日本| 亚洲婷婷天堂在线综合| 亚洲视频在线观看免费| 亚洲VA成无码人在线观看天堂| 男人和女人高潮免费网站| 国产成人涩涩涩视频在线观看免费| 亚洲av永久无码精品天堂久久 | 成人免费视频88|