String[] values = request.getParameterValues("fieldName");
單值用getParameter(),多值必須用getParameterValues(),否則只能拿到第一個值。
<select name="cities" size="4" multiple>
<option value="bj">北京</option>
<option value="sh">上海</option>
<option value="gz">廣州</option>
<option value="sz">深圳</option>
</select>
用戶按住 Ctrl/Shift 多選,提交時瀏覽器發送:cities=bj&cities=sh&cities=gz
<!-- Radio 單選但同 name,瀏覽器仍以數組發送 -->
<input type="radio" name="gender" value="M"> 男
<input type="radio" name="gender" value="F"> 女
<!-- Checkbox 多選 -->
<input type="checkbox" name="hobby" value="read"> 閱讀
<input type="checkbox" name="hobby" value="game"> 遊戲
<input type="checkbox" name="hobby" value="sport"> 運動
<input type="text" name="emails" value="a@test.com">
<input type="text" name="emails" value="b@test.com">
<input type="text" name="emails" value="c@test.com">
@WebServlet("/form-handler")
public class MultiValueServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
req.setCharacterEncoding("UTF-8");
// 統一獲取多值數組
String[] cities = req.getParameterValues("cities");
String[] gender = req.getParameterValues("gender"); // 長度 1
String[] hobbies = req.getParameterValues("hobby");
String[] emails = req.getParameterValues("emails");
// 安全處理:可能為 null (未勾選/未填寫)
printArray("城市", cities);
printArray("性別", gender);
printArray("愛好", hobbies);
printArray("郵箱", emails);
// 業務邏輯:存入資料庫、驗證等
// ...
}
private void printArray(String label, String[] arr) {
if (arr == null || arr.length == 0) {
System.out.println(label + ": [未選擇]");
} else {
System.out.println(label + ": " + Arrays.toString(arr));
}
}
}
| 坑點 | 現象 | 對策 |
|---|---|---|
用 getParameter() 取多值 | 只得到第一個值 | 堅持用 getParameterValues() |
| 未勾選任何 Checkbox | 參數完全不存在,getParameterValues() 返回 null | 判空處理,視為空數組 |
| 中文亂碼 | 值變亂碼 | req.setCharacterEncoding("UTF-8") 在讀取前調用 |
| 前端 name 不一致 | 無法聚合 | 同組輸入框必須同 name |
| Spring MVC 綁定 | 直接用 List<String> 或 String[] 接收 | @RequestParam("hobby") List<String> hobbies |
@PostMapping("/submit")
public String submit(
@RequestParam(value = "cities", required = false) String[] cities,
@RequestParam(value = "hobby", required = false) List<String> hobbies,
@RequestParam(value = "emails", required = false) String[] emails
) {
// 業務處理
return "success";
}
Spring 自動將同名參數綁定到數組/集合,required=false 允許未提交該參數。