1

フォーム enctype "multipart/form-data" によって送信されるリクエスト パラメータを取得しようとしています。私はapache commons fileuploadを使用しています。

私のコードは以下です。

FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(req);
Iterator uploadIterator = items.iterator();

while(uploadIterator.hasNext()){
FileItem uploadedItem = (FileItem) uploadIterator.next();


if (uploadedItem.isFormField()){

  if (uploadedItem.getFieldName().equals("name")){
    name = uploadedItem.getString();
  }
}else{
  //Uploaded files comes here
}

フォームの HTML コードは次のとおりです。

<form name="form" id="form" method="post" action="ServletIncluirEvento"
    enctype="multipart/form-data">
... //Here comes a lot of inputs (I changed the name of the attribute because I am from Brazil and the names are in portuguese)

<select size="9" id="idOpcoesSelecionadas" name="opcoesSelecionadas" multiple style="width: 100%;">
                                            <%  
 it =  colecaoUsuarioSelecionado.iterator();                             String name= "";
 while (it.hasNext()) {
 usuario = (Usuario) it.next();
 name += usuario.getName() + "/"; %>
 <option value="<%=usuario.getLogin()%>">
    <%=usuario.getName()%>
 </option>
<%
  }
%></select>

<input type="hidden" value="<%=name%>" name="name" />

それでも、パラメーターは null になります。

誰かが解決方法を知っていますか?

前もって感謝します

4

2 に答える 2

3

メソッドの呼び出しを変更しますequals:

"name".equals(uploadedItem.getFieldName());

そして、一般的に言って、私はあなたのコードをより明確に書き直します:

FileItemFactory factory = new DiskFileItemFactory();
FileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(req);
for (FileItem uploadedItem : items) {
    if (uploadedItem.isFormField()) {
        String fieldName = uploadedItem.getFieldName();

        if ("name".equals(fieldName)){
           name = uploadedItem.getString();
        }
    } else {
        // process file field
    }    
}

これにより、コードがより理解しやすくなります。メソッドを 2 回呼び出すのは意味がありませんgetFieldName()Genericを使用します。コンパイル時にチェック型を作成することで、コードに安定性を追加します。現在のオブジェクトを取得する際にキャストする必要はありません。

于 2012-08-14T20:39:25.833 に答える
0

この問題を解決するために、アップロードする必要がある画像用のタグ フォーム enctype "multipart/form-data" を使用して jsp ページを再作成し、他のデータ用に、要求パラメーターを正常に取得できる通常のフォームを作成しました。

また、ロジックを改善するためにリファクタリングも行いました。

ヒントをくれたみんなに感謝します。

于 2012-08-15T19:06:13.307 に答える