使用enctype ="multipart/form-data"的表单会导致访问隐藏字段的问题

Ank*_*kur 5 html java forms servlets hidden-field

我创建了一个隐藏的表单元素

<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>
Run Code Online (Sandbox Code Playgroud)

我试图在servlet中获取该行的值(正如我之前所做的那样):

int objId = Integer.parseInt(request.getParameter("imgUploadObjId"));
Run Code Online (Sandbox Code Playgroud)

但我明白了(第33行是上面的一行):

java.lang.NumberFormatException:null
java.lang.Integer.parseInt(Unknown Source)java.lang.Integer.parseInt(Unknown Source)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"的表单有什么不同吗?或者你能看到其他一些错误吗?

Bal*_*usC 16

servlet默认使用application/x-www-form-urlencoded编码解析参数.该multipart/form-data编码但是不支持的servlet直到Servlet的3.0.的getParameter()通话将所有的回报null.

在Servlet 3.0中,您应该使用它HttpServletRequest#getParts()来获取multipart/form-data请求的所有部分,包括普通表单字段.在Servlet 3.0之前,您应该使用Apache Commons FileUpload来解析multipart/form-data请求.有关这两种方法的详细示例,请参阅以下答案:如何使用JSP/Servlet将文件上载到服务器?

请注意,如果您根本不使用任何<input type="file">字段,那么您可以将编码保留在远离<form>.它将默认为application/x-www-form-urlencoded.


Gab*_*res 5

作为解决方法,您还可以在表单的操作属性中添加所需的隐藏参数作为 GET 参数:

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

    //rest of the form here

</form>
Run Code Online (Sandbox Code Playgroud)

这将使request.getParameter("imgUploadObjId")通话正常进行。