ServletRequest.getParameterMap()返回Map 和ServletRequest.getParameter()返回String?

问题描述:

能有人向我解释为什么ServletRequest.getParameterMap()返回一个类型ServletRequest.getParameterMap()返回Map <String,String []>和ServletRequest.getParameter()返回String?

Map<String, String[]> 

ServletRequest.getParameter()刚刚返回类型String

我不明白,为什么在地图将永远映射到一个以上的价值。 TIA。

它返回控件的所有参数值,其中的名称与相同。

例如:

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

​​

任何检查/选择的值会在为:

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

它也是在表可选择多个有用:

<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> 
结合

itemDAO.delete(request.getParameterValues("delete")); 
+5

感谢您的反馈。它现在非常有意义。有时很容易错过显而易见的东西。我想这就是这个网站如果:)。 – BillMan 2009-12-18 15:19:33

如果您具有多值选择控件(如多选列表或一组映射到相同名称的按钮),则多个选择将映射到一个数组。

+0

我不确定在按钮的情况下是否看到该值。在体面的浏览器中,它只会返回**按下**按钮的值,而不是**全部**按钮的值。 – BalusC 2009-12-18 15:29:00

http://foo.com/bar?biff=banana&biff=pear&biff=grape 

“一击”现在映射到{"banana","pear","grape"}

在具有多值的控制(复选框,多选等)时,request.getParameterValues(..)用于取的值的情况。

真正的函数来获取所有参数值是

request.getParameterValues(); 

getParameter()仅仅是一个捷径来获得第一个。