尝试从多选字段获取值。但只能检索第一个值?
在正常形式中,可以毫无问题地使用 for 循环遍历字段名称,然后将值添加到数组中。
但是当使用多部分请求表单时,很难理解如何才能准确地获得这些相同的值?
例如,
服务小程序:
String sctype = null, sfieldname = null, sname = null;
FileItemIterator iterator;
FileItemStream item = null;
InputStream stream = null;
try{
ServletFileUpload upload = new ServletFileUpload();
iterator = upload.getItemIterator(request);
while (iterator.hasNext()) { // iterate over form fields
item = iterator.next();
stream = item.openStream();
String fieldname = item.getFieldName();
if (item.isFormField()) { // Problem here
String value = Streams.asString(stream);
//String[] valueArray = Streams.asString(stream) //test
if (fieldname.equals("title")){
title = value;
}
if (fieldname.equals("multipleSelect")){
//multipleSelect = valueArray[]; //test
multipleSelect = value; // only gives one value :S
} else { // gets values from uploaded files
sfieldname = item.getFieldName();
sname = item.getName();
sctype = item.getContentType();
stream.close();
}
} // if form
} // while
} ....( try catch block/finally, etc)...
jsp/html
<form action="FormServlet" method="post" enctype="multipart/form-data">
<textarea class="form-control" name="title" placeholder="Title"></textarea>
<select class="form-control" name="multipleSelect" multiple="multiple">
<option value="ring">Ring</option>
<option value="necklace">Necklace</option>
</select>
<input type="file" name="file1" size="50" multiple>
</form>
希望这很清楚。非常感谢任何指针。谢谢你的时间。
最佳答案
编辑:
解析的结果是一个文件项列表,每个文件项都实现了 FileItem 接口(interface)。
例如
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
List<String> valueArray = new ArrayList<String>();
if(name.equals("multipleSelect"))
valueArray.add(value);
}
因此,您所要做的就是一个一个地获取所有值,然后将其转换为所需的数据类型(即 - 收集列表中的所有内容并将其转换为 String[] :))
关于java - 使用 isFormField 流/多部分表单从多个选择中获取数组。 Java 小服务程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41963978/