1. 在服務器端獲取參數的時候,HttpServletRequest.getParameter(String name)方法的返回結果根據如下情況區分:
1.1 請求消息中不包含這個參數,返回null。
1.2 請求消息中包含這個參數,但是沒有值。例如param1=¶m2=123中的param1。這種情況下返回空字符串””。
1.3 請求消息中包含多個命名相同的參數。例如param1=1¶m1=2中的param1。這種情況下,返回第一個參數的值。例如上面的1。如果使用HttpServletRequest.getParameterValues(String name),則返回一個包含所有命名相同的值的Sring數組。
2. <input type="submit" name=" " value=" ">。
一個頁面中可以有多個submit元素,點擊某個submit按鈕的時候,瀏覽器會將form的數據封轉後發送給服務器,其中包括一對當前點擊的submit信息的數據,爲當前點擊submit按鈕的name和value。其他不點擊的submit按鈕不傳遞name和value值。
所以可以通過如下語句判斷點擊了那個submit按鈕。
if(req.getParameter("submit按鈕的name屬性") != null && req.getParameter("submit按鈕的name屬性").equals("submit按鈕的value屬性"))
{
執行語句
}
如果某個submit按鈕沒有name屬性。點擊這個按鈕的時候,瀏覽器也會將form的數據封轉後發送給服務器,但是不包含submit按鈕本身的name和value信息。所以服務器端不能判斷是點擊了哪個按鈕。
3. <input type="button" name=" " value=" ">
點擊一個submit按鈕的時候,瀏覽器會自動提交數據到服務器,但是點擊一個Button的時候,瀏覽器只是單純的執行這個Button的onclick事件。如果沒有onclick事件,就什麼也不做。可以在onclick事件中通過JavaScript代碼提交表單。
例如:
function button1_click()
{
document.form1.action = “check.jsp”;
document.form1.submit();
}
點擊button按鈕不傳遞button的name和value值。
4. 各種input的傳遞name和value的情況:
前提是,只要沒有name屬性,就不傳遞。
text和textarea不管是否爲空,都將傳遞到服務器,爲空時傳遞的value值爲空字符串。
checkbox和radio的狀況是,只有被選中的纔會傳遞,不選擇的不傳遞。如果選中了沒有value的checkbox和radio,傳遞的value值默認爲”on”。
hidden不管如何,都會被傳遞給服務器。
5. 一個實踐
5.1 jsp頁面
<form action="<%=request.getContextPath()%>/checkboxtest"
method="post" target="_blank">
<table>
<tr>
<td>
<input type="checkbox" name="selectbooks" value="1">
</td>
<td>
1
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="selectbooks" value="2">
</td>
<td>
2
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="selectbooks" value="3">
</td>
<td>
3
</td>
</tr>
<tr>
<td>
<input type="submit" name="check" value="查看">
</td>
<td>
<input type="submit" name="delete" value="刪除">
</td>
</tr>
</table>
</form>
5.2 後臺Servlet代碼:
resp.setContentType("text/html;charset=UTF-8");
String[] selectBooks = req.getParameterValues("selectbooks");
StringBuffer selectBookIds = new StringBuffer();
int flag = 0;
for (String selectbook : selectBooks) {
if (flag == 0) {
selectBookIds.append(selectbook);
}
else
{
selectBookIds.append("," + selectbook);
}
flag = 1;
}
if(req.getParameter("check") != null)
{
resp.getWriter().println("選擇的圖書的id有:" + selectBookIds.toString());
}
else if(req.getParameter("delete") != null)
{
resp.getWriter().println("刪除的圖書的id有:" + selectBookIds.toString());
}
else
{
resp.getWriter().println("返回的圖書的id有:" + selectBookIds.toString());
}