在multipart / form-data表单中发布复选框的问题

时间:2011-07-05 11:14:02

标签: jsp

我有一个包含复选框和提交按钮的简单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,它的工作原理。 为什么?无法在multipart / form-data表单中使用复选框?

由于 UDI

3 个答案:

答案 0 :(得分:2)

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

如果您没有在同一表单中使用文件上传元素<input type="file">,则根本不需要enctype="multipart/form-data"。您可以将其删除,使其默认为application/x-www-form-urlencoded,您可以按常规方式使用getParameter()

另见:

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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);
    }
}