tags:

views:

558

answers:

5

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.

+1  A: 

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.

Steve B.
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.
BalusC
+3  A: 
http://foo.com/bar?biff=banana&amp;biff=pear&amp;biff=grape

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

Jonathan Feinberg
+1  A: 

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

Bozho
+4  A: 

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"));
BalusC
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 :).
BillMan
+1  A: 

The real function to get all parameter values is

   request.getParameterValues();

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

ZZ Coder