首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring MVC表單標簽完全指南:從基礎綁定到動態復選框與異常處理

     編輯:Java 相關知識

Spring MVC表單標簽革命

Spring 2.0引入form標簽庫,徹底解決早期依賴JSTL/<spring:bind>的痛苦體驗,提供類Struts但更優雅的表單綁定體驗。

命名空間聲明

<%@ taglib prefix="form" uri="https://www.springframework.org/tags/form" %>

核心標簽體系

<form:form> - 表單容器

<form:form>
  用戶名:<form:input path="userName" /><br>
  密碼:<form:password path="password" /><br>
  Email:<form:input path="email" /><br>
  <input type="submit" value="註冊" />
</form:form>

智能特性:

  • 無需action屬性 → 自動提交到當前控制器URL
  • 默認綁定command對象 → 可通過commandName="user"自定義
  • 生成HTML:<form id="command" method="post" action="/app/registerUser.html">

輸入組件三劍客

標簽HTML輸出適用場景
<form:input path="..."/><input type="text" .../>單行文本
<form:password path="..."/><input type="password" .../>密碼輸入
<form:textarea path="..." cols="20" rows="3"/><textarea ...></textarea>多行文本

支持級聯屬性:path="user.userName" → 調用getUser().getUserName()

隱藏域

<form:hidden path="times"/>  <!-- 生成 <input type="hidden" name="times" value="0"/> -->

單選框與復選框深度解析

單選框:同name分組,值匹配自動選中

<form:form>
  性別:<form:radiobutton path="sex" value="0"/>男
        <form:radiobutton path="sex" value="1"/>女
</form:form>

sex=0時生成:

<input type="radio" name="sex" value="0" checked="checked"/>男
<input type="radio" name="sex" value="1"/>女

復選框:類型智能適配

綁定類型 → 選中判斷邏輯:

屬性類型選中條件典型場景
boolean值為true單選項(如同意條款)
String[]/Collection/Enum值在集合中多選項(興趣愛好)
其他值可轉換匹配兼容模式

動態復選框實戰:數據驅動

控制器準備數據

public class UserRegisterController extends SimpleFormController {
    // 初始表單對象
    protected Object formBackingObject(HttpServletRequest request) {
        User user = new User();
        user.setFavorites(Arrays.asList("1", "3")); // 默認選中
        return user;
    }
    
    // 表單顯示數據
    protected Map referenceData(HttpServletRequest request) {
        Map favoriteMap = new LinkedHashMap<>();
        favoriteMap.put("1", "Computer");
        favoriteMap.put("2", "Sport");
        favoriteMap.put("3", "Entertainment");
        favoriteMap.put("4", "Literature");
        return new ModelMap("favoriteMap", favoriteMap);
    }
}

JSP動態渲染

<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<form:form>
  興趣愛好:
  <c:forEach items="${favoriteMap}" var="fav">
    <form:checkbox path="favorites" value="${fav.key}"/>${fav.value}<br>
  </c:forEach>
</form:form>

隱藏域機制解析

生成HTML包含配對隱藏域:

<input type="checkbox" name="favorites" value="1" checked/>
<input type="hidden" name="_favorites" value="1"/>  <!-- 關鍵! -->

作用:未勾選時瀏覽器不提交checkbox值,隱藏域確保Spring檢測到字段存在,觸發setFavorites()將集合置空,避免殘留舊值。

下拉框<form:select>完全指南

基本用法

<form:select path="city" items="${cityList}"/>
  • 單值屬性 → 單選下拉框
  • 集合屬性(String[]/List/Set) → 多選下拉框(multiple="multiple")

值/標籤分離:Map驅動

<form:select path="city" items="${cityMap}" itemValue="key" itemLabel="value"/>

生成:

<select name="city">
  <option value="1">Beijing</option>
  <option value="2">Shanghai</option>
</select>
<input type="hidden" name="_city" value="1"/>

JavaBean集合驅動

<form:select path="city" items="${cities}" itemValue="code" itemLabel="name"/>

City{code, name}對象集合,自動提取屬性構建選項。

提示性默認選項

<form:select path="city">
  <form:option value="" label="-- 請選擇 --"/>
  <form:options items="${cityMap}" itemValue="key" itemLabel="value"/>
</form:select>

默認顯示「請選擇」,未選擇時提交空值。

異常顯示<form:errors>

服務端驗證

ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userName", "required.username", "用戶名必填");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "required.password", "密碼不能為空");

頁面顯示

<form:form>
  用戶名:<form:input path="userName" cssErrorClass="errorInput"/>
  <font color="red"><form:errors path="userName"/></font><br>
  密碼:<form:password path="password"/>
  <font color="red"><form:errors path="password"/></font><br>
</form:form>

通配符批量顯示

  • path="*":顯示所有錯誤
  • path="lastName*":顯示特定前綴屬性錯誤

樣式屬性特殊映射

標簽屬性HTML屬性說明
cssClassclass正常樣式類
cssStylestyle內聯樣式
cssErrorClassclass(錯誤時)驗證失敗時替換樣式
<form:input path="userName" cssClass="normal" cssErrorClass="error" cssStyle="width:200px"/>

總結

Spring MVC表單標簽以約定優於配置、智能默認值、類型安全綁定三大特性,實現:

  • 零配置action提交
  • 自動數據綁定與類型轉換
  • 動態集合渲染(JSTL無縫集成)
  • 異常狀態樣式自動切換
  • 隱藏域機制保障集合清空語義
相比Struts標簽,Spring MVC表單標簽更輕量、更直觀、更符合現代Web開發習慣。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved