ServletRequest.getParameterMap() returns Map<String, String[]> and ServletRequest.getParameter() returns String?
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.
Solution 1:
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"));
Solution 2:
http://foo.com/bar?biff=banana&biff=pear&biff=grape
"biff" now maps to {"banana","pear","grape"}
Solution 3:
The real function to get all parameter values is
request.getParameterValues();
getParameter()
is just a shortcut to get first one.
Solution 4:
In the case with multi-value controls (checkbox, multi-select, etc), the request.getParameterValues(..)
is used to fetch the values.
Solution 5:
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.