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

Spring MVC 學習筆記 (15) - 數據回顯機制與 @ModelAttribute 進階用法

     編輯:Java 綜合教學

Spring MVC 數據回顯:讓表單提交失敗後保留用戶輸入

「數據回顯」是指表單提交驗證失敗或業務異常時,將用戶剛輸入的數據重新填充到表單中,避免用戶重複錄入,提升體驗。Spring MVC 提供多種自動與手動回顯機制。

一、POJO 自動回顯(零配置)

Spring MVC 默認行為:Controller 方法參數中的 POJO 對象會自動放入 Request 域,鍵名為類名首字母小寫(如 itemsCustom)。

@RequestMapping("/editItemsSubmit")
public String editItemsSubmit(ItemsCustom itemsCustom, BindingResult bindingResult) {
    // 校驗失敗直接返回表單頁,頁面可直接用 ${itemsCustom.name} 取值
    if (bindingResult.hasErrors()) return "items/editItems";
    ...
}

可用 @ModelAttribute("customKey") 自定義 Request 域鍵名。

二、@ModelAttribute 方法級用法:公共數據預載入

在 Controller 類中標註 @ModelAttribute 的方法,會在每個請求處理方法執行前自動調用,返回值放入 Request 域,適用於下拉選單、字典表等公共數據。

@Controller
public class ItemsController {

    // 方法返回值自動放入 request 域,key 為 "itemTypes"
    @ModelAttribute("itemTypes")
    public Map<String, String> getItemTypes() {
        Map<String, String> map = new HashMap<>();
        map.put("101", "數碼");
        map.put("102", "母嬰");
        return map;
    }

    @RequestMapping("/queryItems")
    public String queryItems() {
        // 頁面直接可用 ${itemTypes} 渲染下拉框
        return "items/queryItems";
    }
}

JSP 頁面:

<select name="itemType">
  <c:forEach items="${itemTypes}" var="type">
    <option value="${type.key}">${type.value}</option>
  </c:forEach>
</select>

三、手動 Model 控制:最靈活的方式

直接注入 Model 或 ModelMap,手動放入任意鍵值,不受命名約定限制:

@RequestMapping("/editItemsSubmit")
public String editItemsSubmit(Model model, ItemsCustom itemsCustom, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        model.addAttribute("items", itemsCustom); // 手動指定回顯鍵名
        return "items/editItems";
    }
    ...
}

四、簡單類型數據回顯

對於非 POJO 的單個參數(如 ID、頁碼),同樣用 model.addAttribute("id", id) 手動回顯。

最佳實踐建議

  • 優先依賴 POJO 自動回顯,減少樣板代碼。
  • 公共字典/下拉數據用 @ModelAttribute 方法集中管理,避免每個 Handler 重複查詢。
  • 複雜場景(如需合併多個對象、轉換格式)改用手動 Model 完全控制。

掌握這三種層次的回顯機制,能從容應對從簡單表單到複雜向導頁的各種數據保持需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved