java - 使用 isFormField 流/多部分表单从多个选择中获取数组。 Java 小服务程序

标签 java forms servlets

尝试从多选字段获取值。但只能检索第一个值?

在正常形式中,可以毫无问题地使用 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/

相关文章:

html - 单选按钮图像不允许选择值

javascript - JSP 文件中的 jQuery 变量

java - 如何创建 Comparable 接口(interface)的对象

java - 使用迭代优化 HashMap

html - 选择带有图像叠加样式的列表在 Opera 中不起作用

forms - TimePicker 返回对象不是时间 Angular 4

java - servlet 在 GWT 中究竟如何工作?

tomcat - tomcat中的servlet映射

java - 如何使用 ReadableByteChannel 获取文件内容并将其存储在 byteBuffer 中?

java - 获取方法调用者的行号?