ServletRequest.getParameterMap() returns Map<String, String[]> and ServletRequest.getParameter() returns String?
Asked Answered
J

5

51

Can someone explain to me why ServletRequest.getParameterMap() returns type

Map<String, String[]> 

ServletRequest.getParameter() just returns type String

I'm don't understand why the map would ever map to more then one value. TIA.

Jalousie answered 18/12, 2009 at 14:54 Comment(0)
L
57

It returns all parameter values for controls with the same name.

For example:

<input type="checkbox" name="cars" value="audi" /> Audi
<input type="checkbox" name="cars" value="ford" /> Ford
<input type="checkbox" name="cars" value="opel" /> Opel

or

<select name="cars" multiple>
    <option value="audi">Audi</option>
    <option value="ford">Ford</option>
    <option value="opel">Opel</option>
</select>

Any checked/selected values will come in as:

String[] cars = request.getParameterValues("cars");

It's also useful for multiple selections in tables:

<table>
    <tr>
        <th>Delete?</th>
        <th>Foo</th>
    </tr>
    <c:forEach items="${list}" var="item">
        <tr>
            <td><input type="checkbox" name="delete" value="${item.id}"></td>
            <td>${item.foo}</td>
        </tr>
    </c:forEach>
</table>

in combination with

itemDAO.delete(request.getParameterValues("delete"));
Lungfish answered 18/12, 2009 at 14:59 Comment(1)
Thanks for the feedback. It make perfect sense now. Sometimes it's easy to miss the obvious stuff. I guess that's what this web site if for :).Jalousie
F
22
http://foo.com/bar?biff=banana&biff=pear&biff=grape

"biff" now maps to {"banana","pear","grape"}

Feu answered 18/12, 2009 at 14:57 Comment(0)
E
11

The real function to get all parameter values is

   request.getParameterValues();

getParameter() is just a shortcut to get first one.

Expensive answered 18/12, 2009 at 15:12 Comment(0)
I
3

In the case with multi-value controls (checkbox, multi-select, etc), the request.getParameterValues(..) is used to fetch the values.

Indefinable answered 18/12, 2009 at 14:59 Comment(0)
O
2

If you have a multi-value control like a multi-selectable list or a set of buttons mapped to the same name multiple selections will map to an array.

Oscine answered 18/12, 2009 at 14:56 Comment(1)
I am not sure if I see the value in case of buttons. In decent browsers it will only return the value of the pressed button, not the value of all buttons.Lungfish

© 2022 - 2024 — McMap. All rights reserved.