1

I have a form in JSP

                   <form action="/view/tool/Process" method="post"
                        enctype="multipart/form-data" target="_blank">
                        <p class="bottomPadded">&nbsp;</p>
                        <input type="file" name="file" /> 
                        <input id="fileprogramtype" type="text" name="programtype" style="display: none;"/>
                        <p class="bottomPadded">&nbsp;</p>
                        <p class="generalContent bottomPadded"><input class="imageBtn" type="image" name="image" src="/images/upload.png" /></p>
                    </form>

For this the request is mapped as

    <servlet>
        <servlet-name>ProcessUpload</servlet-name>
        <servlet-class>view.tool.servlet.ProcessUpload</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>ProcessUpload</servlet-name>
        <url-pattern>/view/tool/Process</url-pattern>
    </servlet-mapping>

Any idea How can I get the value of <input id="fileprogramtype" type="text" name="programtype" style="display: none;"/> in ProcessUpload

I tried request.getParamter("programtype"), Its returning null.

I even tried

Collection<Part> parts = request.getParts();

            for(Part p : parts) {
                logger.info("Parts ::: "+p.getName());
                if ("programtype".equals(p.getName()))
                {
                    InputStream inputStream = p.getInputStream();
                    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
                    programtype = br.readLine();
                    logger.info("Here is Program Type ::"+programtype);
                }
            }

Its not even getting inside loop.

Can someone tell me in case of multipart form request how to get value of other parameters?

Rohit Mishra
  • 281
  • 5
  • 16

2 Answers2

2

While using enctype="multipart/form-data" you can not directly get parameters by using request.getParameter("programtype");.

In this case the form fields aren't available as parameter of the request, they are included in the stream, so you need to get them from stream. A possible way is to use commons-fileupload. Here is sample code from official documentation ( Refer to 'Processing the uploaded items' section)

// Process the uploaded items
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
    FileItem item = iter.next();

    if (item.isFormField()) {
        processFormField(item);
    } else {
        processUploadedFile(item);
    }
}

For a regular form field

 // Process a regular form field if (item.isFormField()) {
     String name = item.getFieldName();
     String value = item.getString();
     ... }
Rohit Mishra
  • 281
  • 5
  • 16
0

Any idea How can I get the value of <input id="fileprogramtype" type="text" name="programtype" style="display: none;"/> in ProcessUpload

Yes you can get by request.getParameter("programtype");

Are you sure you are getting null because according to Java Doc for ServletRequest#getRequestParameter method

Returns the value of a request parameter as a String, or null if the parameter does not exist. Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data.

You can get a blank value if you are not setting the value manually since it is a hidden field but you will not get a null value.

Answering the same after verifying the similar code in my DEV environment

Neeraj Jain
  • 7,643
  • 6
  • 34
  • 62