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

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

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

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

         經(jīng)過分析,發(fā)現(xiàn)struts的ActionServlet在接收到multipart請求之后,在RequestProcessor中會對request進行封裝:MultiRequestWrapper,然后在Action執(zhí)行完之后,又將已經(jīng)封裝的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之前都執(zhí)行了下面的代碼:
            if (request instanceof MultipartRequestWrapper) {
                request 
    = ((MultipartRequestWrapper) request).getRequest();
            }


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

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

           webwork中應(yīng)該不會出現(xiàn)這個問題,因為webwork中無論ServletDispatcher還是FilterDispatcher在對request wrap之后都沒有再還原。
    posted on 2006-03-15 06:10 dev 閱讀(3933) 評論(1)  編輯  收藏 所屬分類: 設(shè)計/開發(fā)
    Comments
    • # re: struts上傳文件,驗證失敗表單數(shù)據(jù)丟失的原因
      keith
      Posted @ 2006-03-15 10:15
      關(guān)注這個問題  回復  更多評論   
     
    主站蜘蛛池模板: 日韩毛片在线免费观看| 77777亚洲午夜久久多人| 国产精品久久久久免费a∨| 久久99国产综合精品免费| 24小时日本在线www免费的| 免费v片在线观看| 久久夜色精品国产嚕嚕亚洲av| 亚洲国产一区二区视频网站| 亚洲国产成人片在线观看无码| 67194在线午夜亚洲| 欧洲乱码伦视频免费国产| 亚洲精品无码久久久| 人妻仑乱A级毛片免费看| 亚洲午夜久久久久久久久电影网| 亚洲色成人四虎在线观看 | 亚洲福利一区二区精品秒拍| 亚洲日韩AV无码一区二区三区人| 久久99精品免费一区二区| 国产成人免费午夜在线观看 | 亚洲aⅴ无码专区在线观看| 国产永久免费高清在线| 日韩在线免费播放| 亚洲精品国产手机| 成人午夜18免费看| 亚洲男人的天堂在线| 成人免费一区二区无码视频| 真人无码作爱免费视频| 韩国免费一级成人毛片| 亚洲AV无码一区二区乱子伦| 4444www免费看| 亚洲国产第一页www| 一级毛片一级毛片免费毛片| 小小影视日本动漫观看免费| 人成电影网在线观看免费| 亚洲网站视频在线观看| 三级网站免费观看| 久久久久亚洲AV无码专区桃色| 色费女人18女人毛片免费视频| 麻豆国产精品入口免费观看| 亚洲av无码片区一区二区三区| 国产99视频精品免费专区|