我有以下HTML表单。请注意以下隐藏的输入字段具有相同名称(即“ days_of_the_week ”)。
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form enctype="multipart/form-data" name="myForm" method="post">
<input type="file" name="myfile">
<input type="hidden" name="days_of_the_week" id="day1" value="Sunday" />
<input type="hidden" name="days_of_the_week" id="day2" value="Monday" />
<input type="hidden" name="days_of_the_week" id="day3" value="Tuesday" />
<input type="hidden" name="days_of_the_week" id="day4" value="Wednesday" />
<input type="hidden" name="days_of_the_week" id="day5" value="Thursday" />
<input type="hidden" name="days_of_the_week" id="day6" value="Friday" />
<input type="hidden" name="days_of_the_week" id="day7" value="Saturday" />
<input type="submit" value="Submit">
</form>
</body>
</html>
还假设HTML表单中可以有任意数量的隐藏字段,这些字段具有相同的名称或不同的名称。 例如:
<input type="hidden" name="abc" id="abc1" />
<input type="hidden" name="abc" id="abc2" />
<input type="hidden" name="pqr" id="pqr1" />
<input type="hidden" name="xyz" id="xyz1" />
<input type="hidden" name="xyz" id="xyz2" />
上面的HTML表单不是多部分表单。因此,我可以使用下面的代码行将服务器端的隐藏输入值检索为数组。
// here request is the usual HttpServletRequest object.
String[] parameterArray = request.getParameterValues("days_of_the_week");
// Thus parameterArray = {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}
但是在添加multipart/form-data
属性之后,现在代码行上方会返回null
和因此parameterArray = null
。因此,根据我的理解,当我们添加multipart/form-data
属性时,隐藏值不会像往常一样发送到服务器。
所以我的问题是,
有没有办法强制将隐藏值发送到服务器,以便我们可以像往常一样从request.getParameterValues("days_of_the_week");
读取它们?
如果没有,达到上述要求的最佳方法是什么?我可以在服务器端创建一个List并填写如下。但是当如上所述HTML格式中存在任意数量的此类隐藏字段时,我可能必须对每个不同的隐藏字段名称重复if(item.getFieldName().equals("hidden_field_name"))
条件检查,这对我来说并不那么聪明。
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<String> daysOfWeek = new ArrayList();
List requestList = upload.parseRequest(request);
for (Iterator iterator = requestList.iterator(); iterator.hasNext();) {
FileItem item = (FileItem) iterator.next();
if(item.isFormField()){
if(item.getFieldName().equals("days_of_the_week")){
daysOfWeek.add(item.getString());
}
}
}
我非常感谢上述问题的任何建议或解决方案。