數據回顯


一. 概念:

  在數據提交出現錯誤的時候, 已填寫的信息仍在文本框中, 比如用戶登錄, 當用戶輸入錯誤的密碼之后, 用戶名仍在文本框, 只是密碼框清空

二. 意義:

  對於一些要填寫很多信息的表單, 如果因為一些錯誤導致已經填寫的整個表單信息重新填寫, 對於用戶非常地不友好

三. 回顯方法:

  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對象中

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM