一. 概念:
在數據提交出現錯誤的時候, 已填寫的信息仍在文本框中, 比如用戶登錄, 當用戶輸入錯誤的密碼之后, 用戶名仍在文本框, 只是密碼框清空
二. 意義:
對於一些要填寫很多信息的表單, 如果因為一些錯誤導致已經填寫的整個表單信息重新填寫, 對於用戶非常地不友好
三. 回顯方法:
1. 默認情況
POJO數據傳入controller方法后, springMvc自動將POJO數據放到request域, key等於POJO類的首字母小寫
** 實驗:
(1) 在商品名稱填錯的情況下, 點擊"提交"按鈕, 其他數據仍在[注意, POJO類:ItemsCustom, 在jsp頁面取值形式:value="${itemsCustom.name }"]
(2) 修改Handler的響應POJO類的key[屬性]
// 商品信息修改頁面的展示 @RequestMapping("/editItems") public String editItems(Model model, Integer id) throws Exception { // 根據id獲取商品信息 ItemsCustom itemsCustom = itemsService.findItemsById(id); model.addAttribute("items", itemsCustom); // 改之前是itemsCustom return "items/editItems"; }
頁面獲取數據的形式
1 <table border="1" cellpadding="5" cellspacing="1" style="width: 30%"> 2 <tr> 3 <td>商品名稱</td> 4 <td> 5 <input type="text" name="name" value="${items.name }"/> 6 </td> 7 </tr> 8 <tr><td>商品價格</td><td><input type="text" name="price" value="${items.price }"/></td></tr> 9 <tr><td>生產日期</td> 10 <td> 11 <input type="text" name="createtime" value='<fmt:formatDate value="${items.createtime }" pattern="yyyy-MM-dd HH:mm:ss"/>' 12 class="laydate-icon" onclick="laydate()"/> 13 </td> 14 </tr> 15 <tr><td>商品描述</td><td><textarea rows="3" cols="40" name="detail">${items.detail }</textarea></td></tr> 16 </table>
在這種情況下, Handler可以正常向jsp頁面響應數據, 但是由於傳遞的key值是items, 不等於POJO類ItemsCustom的首字母小寫, 當商品名稱填寫出錯時
無法進行數據回顯, 數據全部消失, 需要重新填寫, 如下:
2. 非默認情況下的數據回顯解決方法
插入一個知識點: @ModelAttribute這個注解還可以將方法的返回值響應到頁面
Handler代碼:
1 // 模擬@ModelAttribute注解將方法的返回值響應到頁面的試驗[靜態數據] 2 @ModelAttribute("itemsTypes") 3 public Map<String, String> getItemsTypes() { 4 Map<String, String> itemsTypes = new HashMap<String, String>(); 5 // 靜態數據, 開發中要去數據庫獲取 6 itemsTypes.put("101", "數碼"); 7 itemsTypes.put("102", "母嬰"); 8 itemsTypes.put("103", "家電"); 9 return itemsTypes; 10 }
jsp代碼:
1 <td style="width: 190px"> 商品類型:
2 <select name="types" style="width: 100px">
3 <c:forEach items="${itemsTypes }" var="type">
4 <option value="${type.key }">${type.value }</option>
5 </c:forEach>
6 </select>
7 </td>
運行:
因此, 做一個實驗: 注明(靜態數據)
在"提交"按鈕對應的Handler方法中, 添加注解@ModelAttribute("items"), 里面的key值, 剛好是jsp頁面用於取值的key, 這時候可以進行數據回顯
除此之外, 對於數據回顯, 還有比添加@ModelAttribute注解方法更簡單的方法, 那就是: 直接將要回顯的數據放入Model中
但是對於簡單類型的屬性, springMvc不支持回顯, 只能通過Model方法實現: model.addAttribute("id", id);
總結數據回顯的方法:
1. 使用springMvc默認的方法, 保持jsp中取值的key和POJO類名的首字母小寫一致;
2. 使用@ModelAttribute注解, jsp中取值的key和POJO類名的首字母小寫可以不一致;
3. 使用Model, 直接將數據放入Model對象中