我有一个包含复选框和提交按钮的简单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
答案 0 :(得分:2)
默认的HTML表单编码为application/x-www-form-urlencoded
。 getParameter()
方法依赖于此。 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);
}
}