Java 是否使用enctype=";“多部分/表单数据”;导致访问隐藏字段时出现问题

Java 是否使用enctype=";“多部分/表单数据”;导致访问隐藏字段时出现问题,java,html,forms,servlets,hidden-field,Java,Html,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

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

<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>
但我明白了(第33行是上面的那行):

java.lang.NumberFormatException:null
java.lang.Integer.parseInt(未知源) java.lang.Integer.parseInt(未知源) web.objects.UploadImage.doPost(UploadImage.java:33) javaservlet.http.HttpServlet.service(HttpServlet.java:637) javaservlet.http.HttpServlet.service(HttpServlet.java:717)


带有enctype=“multipart/form data”的表单有什么不同吗?或者您可以看到其他错误。

多部分编码不应影响隐藏的文本字段。很可能是别的原因。你能发布更多的HTML/Servlet代码吗?

不确定这是否有帮助,但我在jsp页面中使用了多部分表单,这些表单被提交到struts Servlet,并且这些页面有隐藏字段,这些字段在我的struts Action类(包装在struts ActionForm中)中接收,因此我认为这里没有任何困难


您是否尝试过将此值作为字符串接收并查看实际出现的内容?

您应该检查servlet代码本身。你收到请求了吗?当您尝试获取值并对其进行解析时,是否可以调试应用程序,以查看环境中存在哪些变量。

确实有些不同

request.getParameter
仅适用于
元素的
操作
属性中指定的硬编码URL参数。在您的情况下,它不包含任何

所有其他参数都将被编码到表单本身中,您必须通过直接解析HTTP请求的输入流来处理表单本身

幸运的是,您不是第一个这样做的人,而且有一些很好的开源库可以解决这个问题


我一直在用。您创建一个解析器并向其传递一个请求对象,然后遍历不同的项。其中一个是隐藏字段。

默认情况下,servlet使用
application/x-www-form-urlencoded
编码解析参数。然而,
多部分/表单数据
编码在servlet中不受支持,直到。
getParameter()
调用将全部返回
null

在Servlet3.0中,您应该改为使用来获取
多部分/表单数据
请求的所有部分,包括正常表单字段。在Servlet 3.0之前,您应该使用解析
多部分/表单数据
请求。有关这两种方法的详细示例,请参见以下答案:


请注意,如果您根本没有使用任何
字段,那么您可以将编码从
中删除。然后它将默认为
application/x-www-form-urlencoded

,作为一种解决方法,您还可以将所需的隐藏参数作为GET参数添加到表单的action属性中:

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

    //rest of the form here

</form>

//表格的其余部分在这里

这将允许
request.getParameter(“imgUploadObjId”)
调用工作。

我只为字段设置了id attAttribute,它没有显示在列表项列表中。当我添加name属性时,它出现了。

查看Firebug,我在请求中得到了正确的值,但是根据其他人所说的,我必须做一些不同的事情。我将使用ApacheFileUpload并通过元素循环。+1。如果不需要上传文件,建议省略
enctype
属性。我也遇到过这种情况。我想使用同名属性发送多个复选框的值,以便这些值以整数数组形式存储在struts表单中。但是在选择了数千个复选框之后,我发现在使用请求.GETPARATEMETIVE值(“MyAttor”)时,中间的一些值会跳过特定的索引。它们只是空的。因为我没有在表单上上传任何文件,所以从表单中删除EnCype =“多部分/表单数据”使我能够正确发送所有的值。
<form name="UploadImage" enctype="multipart/form-data" method="post" action="UploadImage?imgUploadObjId=52">

    //rest of the form here

</form>