如何将Multipart表单中的隐藏输入参数发送到服务器

时间:2018-04-20 16:27:18

标签: java html multipartform-data

我有以下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());
        }  
    }
}

我非常感谢上述问题的任何建议或解决方案。

0 个答案:

没有答案