6

非表示のフォーム要素を作成しました

<form name="UploadImage" enctype="multipart/form-data" method="post" action="UploadImage">
    <label>
        </label>
    <input name="imgUploadObjId" id="imgUploadObjId" value="52" type="hidden">

    //rest of the form here

</form>

そして、サーブレットでこの行を使用して値を取得しようとしています(以前に行ったように):

int objId = Integer.parseInt(request.getParameter("imgUploadObjId"));

しかし、私はこれを取得します(33行目は上の行です):

java.lang.NumberFormatException: null
java.lang.Integer.parseInt(不明なソース) java.lang.Integer.parseInt(不明なソース) web.objects.UploadImage.doPost(UploadImage.java:33) javax.servlet.http.HttpServlet .service(HttpServlet.java:637) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

enctype="multipart/form-data" のフォームについて何か違いはありますか? または、他のエラーが表示されますか。

4

7 に答える 7

16

サーブレットは、デフォルトでapplication/x-www-form-urlencodedエンコーディングを使用してパラメーターを解析します。ただし、エンコーディングはServlet 3.0multipart/form-dataまでサーブレットでサポートされていません。呼び出しはすべて返されます。getParameter()null

Servlet 3.0 では、通常のフォーム フィールドを含むHttpServletRequest#getParts()、リクエストのすべての部分を取得するために、代わりに を使用する必要がありました。multipart/form-dataサーブレット 3.0 より前では、Apache Commons FileUploadを使用してリクエストを解析する必要がありmultipart/form-dataました。両方のアプローチの詳細な例については、次の回答も参照してください: How to upload files to server using JSP/Servlet?

フィールドをまったく使用していない場合は<input type="file">、エンコーディングを<form>. その後、デフォルトで になりますapplication/x-www-form-urlencoded

于 2010-05-13T15:15:22.093 に答える
5

回避策として、フォームのアクション属性にGETパラメーターとして必要な非表示パラメーターを追加することもできます。

<form name="UploadImage" enctype="multipart/form-data" method="post" action="UploadImage?imgUploadObjId=52">

    //rest of the form here

</form>

これにより、request.getParameter("imgUploadObjId")呼び出しが機能するようになります。

于 2012-01-17T15:08:26.050 に答える
2

確かに違うところがあります。

request.getParameter要素actionの属性で指定されたハードコーディングされた URL パラメーターに対してのみ機能します。<form>あなたの場合、何も含まれていません。

他のすべてのパラメーターはフォーム自体にコード化され、HTTP 要求の入力ストリームを直接解析して処理する必要があります。

幸いなことに、あなたが初めてではなく、これを処理する優れたオープンソース ライブラリがいくつかあります。

私はApache FileUploadを使用しています。パーサーを作成し、それにリクエスト オブジェクトを渡してから、さまざまなアイテムを反復処理します。そのうちの 1 つがあなたの隠しフィールドになります。

于 2010-05-13T15:15:16.593 に答える
1

マルチパート エンコーディングは、非表示のテキスト フィールドには影響しません。それはおそらく別のものです。HTML/サーブレット コードをもっと投稿できますか?

于 2010-05-13T15:09:56.143 に答える
1

これが役立つかどうかはわかりませんが、Struts サーブレットに送信される jsp ページでマルチパート フォームを使用しました。これらのページには、Struts アクション クラス (Struts ActionForm にラップされている) で受信される隠しフィールドがあるため、そこにはないと思います。ここでハードストップです。

この値を文字列として受け取って、実際にそこに何が来るか見てみましたか?

于 2010-05-13T15:11:08.467 に答える
1

サーブレット コード自体を確認します。リクエストは届いていますか?値を取得して解析しようとするときに、環境に存在する変数を確認するためにアプリをデバッグできますか。

于 2010-05-13T15:13:27.773 に答える
0

フィールドに id 属性を設定しただけで、リスト項目リストに表示されませんでした。name 属性を追加すると表示されました。

于 2014-07-29T13:55:54.470 に答える