4

更新:問題は Flash コンポーネント自体にありました。要素から複数の値を適切にコンパイルしていませんでした。開発者に通知したところ、回避策が実装されました。Commons FileUpload は、受け入れられた回答ごとに複数の値をサポートしています。

私はenctype="multipart/form-data"というフォームを持っています。

<select name="XX" multiple="multiple">

ユーザーが複数のファイルを選択できるようにする Flash アップロード コンポーネント。Apache Commons FileUpload を使用して POST を処理するとき、次の方法で選択フィールドを検出します

item.isFormField() == true

を介して詳細を抽出し続けます

// Process a regular form field
if (item.isFormField()) {
    String name = item.getFieldName();
    String value = item.getString();
}

私が抱えている問題は、item.getString(); です。選択フィールドから最初に選択された値のみを返します。いくつのアイテムを選んでも、最初のアイテムしか得られません。

同様に、パラメータ抽出に標準のサーブレット メソッドを使用すると、つまり.

final String[] values = request.getParameterValues("XX");

値は空です。これは、フォームがエンコードされたマルチパートであるためだと思います。

複数選択フィールドからこれらの複数選択された値を取得するにはどうすればよいですか?

この (未回答の) 質問は、別の作成者によってSun フォーラムにも投稿されています。

4

2 に答える 2

4

上記のリンクは機能していません。他の誰かが同じ問題に直面している場合、すべての値を取得する方法は次のとおりです-

Commons File Upload を使用して選択フィールドから複数の値を取得する -

   List items = upload.parseRequest(request);
   Iterator iter = items.iterator();

    while (iter.hasNext()) {
        FileItem item = (FileItem) iter.next();

        if (item.isFormField()) {
           String name = item.getFieldName();
           String value = item.getString();

        if (name.equals("multi-select"))
            completeSet = value;
     }

その場合、completeSet には最初の値のみが含まれます。複数選択の他のすべての値も、同じ名前の項目にあります (ここではmulti-select )。したがって、すべての値を 1 つずつ取得してから、必要なデータ型に変換するだけです (つまり、List 内のすべてを収集し、String[] に変換します:))。

List<String> completeSet=new ArrayList<String>();
if(name.equals("multi-select"))
     completeSet.add(value);

このようにして、最後に completeSet にすべての値のセットが含まれます。

于 2016-10-07T07:29:24.453 に答える
2

実際には、いくつかの項目が同じ fieldName を持つことができます。同じ fieldName のすべての項目文字列値を String のコレクションに追加し、そのコレクションを配列に変換するだけです。

そこにいくつかの情報が見つかりました: http://www.nabble.com/RES:-File-Upload-td25910926.html

于 2009-10-24T14:31:11.187 に答える