【问题标题】:Problem with posting checkbox in multipart/form-data form以多部分/表单数据形式发布复选框的问题
【发布时间】:2011-07-05 11:14:01
【问题描述】:

我有一个包含复选框和提交按钮的简单 JSP:

<form action="MappingSubmit.jsp" enctype="multipart/form-data" method="POST" name="fileSubmit">
<input type="checkbox" name="scan" value="scan">Scan immediately<br><br>
<input type="submit" value="Submit">
</form>

还有一个应该读取提交数据的 JSP:

<body>
<%
    response.getWriter().println(request.getParameter("scan"));
%>
</body>

问题是 getParameter 总是返回 null。 如果我从表单中删除 enctype,它就可以工作。 为什么?无法在多部分/表单数据表单中使用复选框?

谢谢 乌迪

【问题讨论】:

    标签: jsp


    【解决方案1】:

    默认的 HTML 表单编码是application/x-www-form-urlencodedgetParameter() 方法依赖于此。 getParameter() 不支持其他形式的编码。当您使用 Servlet 3.0 时,您应该为此使用 getParts()。或者当您使用 Servlet 2.5 或更早版本和/或当您已经使用 multipart/form-data 解析器(例如 Apache Commons FileUpload)时,您应该使用它来提取部分。

    如果您没有以相同的形式使用文件上传元素&lt;input type="file"&gt;,那么您根本不需要enctype="multipart/form-data"。您可以将其删除,使其默认为application/x-www-form-urlencoded,然后您可以按通常的方式使用getParameter()

    另见:

    【讨论】:

      【解决方案2】:

      您不能使用enctype="multipart/form-data" 访问来自 from 的请求参数。你应该看看 O'Reilly MultipartRequest 或 Apache Commons FileUpload

      【讨论】:

        【解决方案3】:

        如果要获取提交的数据,必须解析文件流数据

        String tmpDir = "C:/temp";
        DiskFileItemFactory dfi = new DiskFileItemFactory();
        dfi.setRepository(new File(tmpDir));
        ServletFileUpload fileItems = new ServletFileUpload(dfi);
        fileItems.setHeaderEncoding("UTF-8");
        fileItems.setSizeMax(-1);
        List fileItems = null;
        fileItems = fileItems.parseRequest(request);
        Map paramsMap = new Hashtable();
        File file = null;
        for(int i = 0;i < fileItems.size();i++){
            FileItem fItem = (FileItem)fileItems.get(i);
            if(fItem.isFormField()){
                //form data
                paramsMap.put(fItem.getFieldName(), fItem.getString("UTF-8"));
            }else{
                //stream
                file = new File(tmpDir, HashEngine.getSequence());
                fItem.write(file);
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2019-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-08
          • 1970-01-01
          • 2014-08-26
          • 2015-10-31
          相关资源
          最近更新 更多