| 框架/語言 | 接收型別 | 說明 |
| Spring MVC / Spring Boot | String[] hobby 或 List<String> hobby | 自動綁定同名參數為陣列/列表 |
| Struts 2 | String[] hobby 或 List<String> hobby | 同名參數自動轉換 |
| Servlet 原生 | request.getParameterValues("hobby") → String[] | 手動處理 |
| PHP | $_POST['hobby'] 為陣列 (若名為 hobby[]) | 名稱需加 [] |
| Node.js (Express + body-parser) | req.body.hobby 為陣列 | 自動解析 |
資料庫儲存策略
- 關聯表 (正規化,推薦):
user_hobby (user_id, hobby_id) -- hobby_id 參照 hobby_dict
優點:查詢靈活、支援外鍵、擴充性佳。
- JSON 欄位 (MySQL 5.7+ / PostgreSQL):
hobbies JSON -- 存 ["1","3"]
優點:無需額外表、結構彈性。缺點:SQL 查詢較複雜。
- 逗號分隔字串 (不推薦):
hobbies VARCHAR(255) -- 存 "1,3"
缺點:查詢需 FIND_IN_SET/LIKE、難以索引、維護麻煩。
實體類別屬性定義 (Java 範例)
@Entity
public class User {
@Id Long id;
@ElementCollection // JPA 映射集合至關聯表
@CollectionTable(name = "user_hobby", joinColumns = @JoinColumn(name = "user_id"))
@Column(name = "hobby_id")
private Set hobbies = new HashSet<>(); // 或 List
// getter/setter
}
關鍵提醒
- 未勾選任何項時:後端接收到
null 或空陣列,**務必處理**,否則更新時可能誤清空舊資料。
- 前端建議加隱藏欄位
<input type="hidden" name="hobby" value=""> 確保參數存在 (部分框架需要)。
- 資料庫層面加
CHECK (JSON_VALID(hobbies)) 保證 JSON 格式。
Spring MVC 直接用 List<String> 接收,配合 JPA @ElementCollection 存關聯表,是處理複選框最標準的做法。
- 上一篇文章: Java Scanner 輸入驗證:為什麼 catch 區塊需要 sc.next() 清除緩衝區
- 下一篇文章: Proxool XML 組態 SAX 解析錯誤:首行 BOM/編碼問題
Copyright ©
程式碼之家 All Rights Reserved