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.
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"));
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.