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>

我正在尝试在 servlet 中使用这一行获取值(就像我之前所做的那样):

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

但我明白了(第 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" 的表单有什么不同吗?或者你能看到其他错误。

4

7 回答 7

16

servlet 默认使用application/x-www-form-urlencoded编码解析参数。然而,在Servlet 3.0multipart/form-data之前,servlet 不支持编码。呼叫将全部返回。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.

于 2010-05-13T15:15:22.093 回答
5

作为一种解决方法,您还可以在表单的 action 属性中添加所需的隐藏参数作为 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。您创建一个解析器并将请求对象传递给它,然后遍历不同的项目。其中之一将是你的隐藏领域。

于 2010-05-13T15:15:16.593 回答
1

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

于 2010-05-13T15:09:56.143 回答
1

不确定这是否有帮助,但我在提交给 struts servlet 的 jsp 页面中使用了多部分表单,并且这些页面具有隐藏字段,这些字段在我的 Struts Action 类中接收(包装在 Struts ActionForm 中),所以我不认为有是任何硬停止在这里。

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

于 2010-05-13T15:11:08.467 回答
1

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

于 2010-05-13T15:13:27.773 回答
0

我只为该字段设置了 id 属性,它没有显示在 List items 列表中。当我添加名称属性时,它出现了。

于 2014-07-29T13:55:54.470 回答