4

いくつかのフィールドを含む multipart/form-data フォームが<input type='text'>あり<input type='file'>ます。

私はこのコードを使用します

 List<FileItem> multipartItems = null;
 boolean isMultipart = ServletFileUpload.isMultipartContent(request);
 if (!isMultipart) {
   System.out.println("false");
 } else {
   FileItemFactory factory = new DiskFileItemFactory();
   ServletFileUpload upload = new ServletFileUpload(factory);
   multipartItems = null;
       try {
           multipartItems = upload.parseRequest(request);
           System.out.println("true "+multipartItems.toString());

       } catch (FileUploadException e) {
       e.printStackTrace();
       }

      }

フォームにマルチパート コンテンツがあるかどうかを調べます。次に、使用します

   Map<String, String[]> parameterMap = new HashMap<String, String[]>();

     for (FileItem multipartItem : multipartItems) {
        if (multipartItem.isFormField()) {
            processFormField(multipartItem, parameterMap);
        } else {
            request.setAttribute(multipartItem.getFieldName(), multipartItem);
        }
     }

コードの最初のスニペットを実行すると、else が実行されますが、最後に multipartItems は null になります。

このため、2 番目のコード スニペットの for は実行されません。

なぜこのような振る舞いをするのかわかりません。私はStruts 1.3.10を使用しています

編集

struts がすでにリクエストを解析しているかどうかを確認するにはどうすればよいですか?

もしそうなら、特定のフォームだけをオフにする方法はありますか?

編集2

JSON形式でコード化された動的フォームがあります。json と隠しプロパティ用のフォーム Bean があります。次に、json を「手で」解析します。すべてが完全に機能しますが、input type=file フィールドを追加し、multipart/form-data enctype を使用する必要があります。

Struts リクエストの解析を防ぐために、web.xml に次のように記述しました。

<init-param>
    <param-name>multipartClass</param-name>
    <param-value>none</param-value>
</init-param>

しかし、うまくいかないようです

4

2 に答える 2