我有一个多部分/表单数据表单,其中包含一些<input type='text'>
and <input type='file'>
fields.
我用这个代码
List<FileItem> multipartItems = null;
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
System.out.println("false");
} else {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
multipartItems = null;
try {
multipartItems = upload.parseRequest(request);
System.out.println("true "+multipartItems.toString());
} catch (FileUploadException e) {
e.printStackTrace();
}
}
查明表单是否包含多部分内容。
然后,我用
Map<String, String[]> parameterMap = new HashMap<String, String[]>();
for (FileItem multipartItem : multipartItems) {
if (multipartItem.isFormField()) {
processFormField(multipartItem, parameterMap);
} else {
request.setAttribute(multipartItem.getFieldName(), multipartItem);
}
}
通过运行第一段代码,else 被执行,但最后 multipartItems 为 null。
因此,第二个代码片段中的 for 永远不会被执行。
我不知道为什么会有这种行为。我正在使用 Struts 1.3.10
EDIT
如何检查struts是否已经解析了请求?
如果是这样,有没有办法只针对特定表单关闭它?
EDIT 2
我有一个动态表单,以 json 格式编码。我有一个用于 json 和隐藏属性的表单 bean。然后我“手动”解析 json。一切都很完美,但现在我必须添加输入类型=文件字段并使用 multipart/form-data enctype。
为了防止 struts 请求解析,我放入了 web.xml:
<init-param>
<param-name>multipartClass</param-name>
<param-value>none</param-value>
</init-param>
但似乎不起作用