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:nulljava.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>