最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springmvc數(shù)據(jù)回顯實現(xiàn)原理實例解析

 更新時間:2020年09月23日 09:40:59   作者:柒  
這篇文章主要介紹了Springmvc數(shù)據(jù)回顯實現(xiàn)原理實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

數(shù)據(jù)回顯就是當(dāng)用戶數(shù)據(jù)提交失敗時,自動填充好已經(jīng)輸入的數(shù)據(jù),一般來說,如果是使用Ajax來做數(shù)據(jù)提交,基本上是沒有數(shù)據(jù)回顯這個需求的,但是如果通過表單做數(shù)據(jù)提交,那么數(shù)據(jù)回顯就非常必要了。

簡單數(shù)據(jù)類型數(shù)據(jù)回顯

簡單數(shù)據(jù)類型,實際上框架在這里沒有提供任何形式的支持,就是我們自己手動配置。加入提交的 Student 數(shù)據(jù)不符合要求,那么重新回到添加 Student 頁面,并且預(yù)設(shè)之前已經(jīng)填好的數(shù)據(jù)。

首先我們先來改造一下 student.jsp 頁面:

<form action="/addstudent" method="post">
  <table>
    <tr>
      <td>學(xué)生編號:</td>
      <td><input type="text" name="id" value="${id}"></td>
    </tr>
    <tr>
      <td>學(xué)生姓名:</td>
      <td><input type="text" name="name" value="${name}"></td>
    </tr>
    <tr>
      <td>學(xué)生郵箱:</td>
      <td><input type="text" name="email" value="${email}"></td>
    </tr>
    <tr>
      <td>學(xué)生年齡:</td>
      <td><input type="text" name="age" value="${age}"></td>
    </tr>
    <tr>
      <td colspan="2">
        <input type="submit" value="提交">
      </td>
    </tr>
  </table>
</form>

在接收數(shù)據(jù)時,使用簡單數(shù)據(jù)類型去接收:

@RequestMapping("/addstudent")
public String addStudent2(Integer id, String name, String email, Integer age, Model model) {
  model.addAttribute("id", id);
  model.addAttribute("name", name);
  model.addAttribute("email", email);
  model.addAttribute("age", age);
  return "student";
}

這種方式,相當(dāng)于框架沒有做任何工作,就是我們手動做數(shù)據(jù)回顯的。此時訪問頁面,服務(wù)端會再次定位到該頁面,而且數(shù)據(jù)已經(jīng)預(yù)填好。

實體類數(shù)據(jù)回顯

簡單數(shù)據(jù)類型的回顯,實際上非常麻煩,因為需要開發(fā)者在服務(wù)端一個一個手動設(shè)置。如果使用對象的話,就沒有這么麻煩了,因為 SpringMVC 在頁面跳轉(zhuǎn)時,會自動將對象填充進(jìn)返回的數(shù)據(jù)中。

<form action="/addstudent" method="post">
  <table>
    <tr>
      <td>學(xué)生編號:</td>
      <td><input type="text" name="id" value="${student.id}"></td>
    </tr>
    <tr>
      <td>學(xué)生姓名:</td>
      <td><input type="text" name="name" value="${student.name}"></td>
    </tr>
    <tr>
      <td>學(xué)生郵箱:</td>
      <td><input type="text" name="email" value="${student.email}"></td>
    </tr>
    <tr>
      <td>學(xué)生年齡:</td>
      <td><input type="text" name="age" value="${student.age}"></td>
    </tr>
    <tr>
      <td colspan="2">
        <input type="submit" value="提交">
      </td>
    </tr>
  </table>
</form>

注意,在預(yù)填數(shù)據(jù)中,多了一個 student. 前綴。這 student 就是服務(wù)端接收數(shù)據(jù)的變量名,服務(wù)端的變量名和這里的 student 要保持一直。服務(wù)端定義如下:

@RequestMapping("/addstudent")
public String addStudent(@Validated(ValidationGroup2.class) Student student, BindingResult result) {
  if (result != null) {
    //校驗未通過,獲取所有的異常信息并展示出來
    List<ObjectError> allErrors = result.getAllErrors();
    for (ObjectError allError : allErrors) {
      System.out.println(allError.getObjectName()+":"+allError.getDefaultMessage());
    }
    return "student";
  }
  return "hello";
}

注意,服務(wù)端什么都不用做,就說要返回的頁面就行了,student 這個變量會被自動填充到返回的 Model
中。變量名就是填充時候的 key。如果想自定義這個 key,可以在參數(shù)中寫出來 Model,然后手動加入 Student 對象,就像簡單數(shù)據(jù)類型回顯那樣。

另一種定義回顯變量別名的方式,就是使用 @ModelAttribute 注解。

ModelAttribute

@ModelAttribute 這個注解,主要有兩方面的功能:

  • 在數(shù)據(jù)回顯時,給變量定義別名
  • 定義全局?jǐn)?shù)據(jù)

定義別名

在數(shù)據(jù)回顯時,給變量定義別名,非常容易,直接加這個注解即可

@RequestMapping("/addstudent")
public String addStudent(@ModelAttribute("s") @Validated(ValidationGroup2.class) Student student, BindingResult result) {
  if (result != null) {
    //校驗未通過,獲取所有的異常信息并展示出來
    List<ObjectError> allErrors = result.getAllErrors();
    for (ObjectError allError : allErrors) {
      System.out.println(allError.getObjectName()+":"+allError.getDefaultMessage());
    }
    return "student";
  }
  return "hello";
}

這樣定義完成后,在前端再次訪問回顯的變量時,變量名稱就不是 student 了,而是 s:

<form action="/addstudent" method="post">
  <table>
    <tr>
      <td>學(xué)生編號:</td>
      <td><input type="text" name="id" value="${s.id}"></td>
    </tr>
    <tr>
      <td>學(xué)生姓名:</td>
      <td><input type="text" name="name" value="${s.name}"></td>
    </tr>
    <tr>
      <td>學(xué)生郵箱:</td>
      <td><input type="text" name="email" value="${s.email}"></td>
    </tr>
    <tr>
      <td>學(xué)生年齡:</td>
      <td><input type="text" name="age" value="${s.age}"></td>
    </tr>
    <tr>
      <td colspan="2">
        <input type="submit" value="提交">
      </td>
    </tr>
  </table>
</form>

定義全局?jǐn)?shù)據(jù)

假設(shè)有一個 Controller 中有很多方法,每個方法都會返回數(shù)據(jù)給前端,但是每個方法返回給前端的數(shù)據(jù)又不太一樣,雖然不太一樣,但是沒有方法的返回值又有一些公共的部分??梢詫⑦@些公共的部分提取出來單獨封裝成一個方法,用 @ModelAttribute 注解來標(biāo)記。

例如在一個 Controller 中 ,添加如下代碼:

@ModelAttribute("info")
public Map<String,Object> info() {
  Map<String, Object> map = new HashMap<>();
  map.put("username", "javaboy");
  map.put("address", "www.javaboy.org");
  return map;
}


當(dāng)用戶訪問當(dāng)前 Controller 中的任意一個方法,在返回數(shù)據(jù)時,都會將添加了 @ModelAttribute 注解的方法的返回值,一起返回給前端。@ModelAttribute 注解中的 info 表示返回數(shù)據(jù)的 key。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 單例模式線程安全問題

    Java 單例模式線程安全問題

    這篇文章主要介紹了Java 單例模式線程安全問題的相關(guān)資料,希望通過本文大家能了解掌握單例模式中線程安全的使用方法,需要的朋友可以參考下
    2017-09-09
  • Java語言描述存儲結(jié)構(gòu)與鄰接矩陣代碼示例

    Java語言描述存儲結(jié)構(gòu)與鄰接矩陣代碼示例

    這篇文章主要介紹了Java語言描述存儲結(jié)構(gòu)與鄰接矩陣代碼示例,涉及Java存儲結(jié)構(gòu),鄰接矩陣,鄰接表的介紹與比較,然后分享了鄰接矩陣的Java實現(xiàn)等相關(guān)內(nèi)容,具有一定借鑒價值,需要的朋友可以參考。
    2017-11-11
  • 在java中由類名和方法名字符串實現(xiàn)其調(diào)用方式

    在java中由類名和方法名字符串實現(xiàn)其調(diào)用方式

    這篇文章主要介紹了在java中由類名和方法名字符串實現(xiàn)其調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java中HashMap如何解決哈希沖突

    Java中HashMap如何解決哈希沖突

    本文主要介紹了Java中HashMap如何解決哈希沖突,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Java精品項目瑞吉外賣之新增菜品與分頁查詢篇

    Java精品項目瑞吉外賣之新增菜品與分頁查詢篇

    這篇文章主要為大家詳細(xì)介紹了java精品項目-瑞吉外賣訂餐系統(tǒng),此項目過大,分為多章獨立講解,本篇內(nèi)容為新增菜品和分頁查詢功能的實現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • SpringMVC實現(xiàn)controller中獲取session的實例代碼

    SpringMVC實現(xiàn)controller中獲取session的實例代碼

    本篇文章主要介紹了SpringMVC實現(xiàn)controller中獲取session的實例代碼,具有一定的參考價值,有興趣的可以了解一下。
    2017-02-02
  • 淺談spring的重試機制無效@Retryable@EnableRetry

    淺談spring的重試機制無效@Retryable@EnableRetry

    這篇文章主要介紹了淺談spring的重試機制無效@Retryable@EnableRetry,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • springboot與vue實現(xiàn)簡單的CURD過程詳析

    springboot與vue實現(xiàn)簡單的CURD過程詳析

    這篇文章主要介紹了springboot與vue實現(xiàn)簡單的CURD過程詳析,圍繞springboot與vue的相關(guān)資料展開實現(xiàn)CURD過程的過程介紹,需要的小伙伴可以參考一下
    2022-01-01
  • Maven導(dǎo)入依賴時爆紅的幾種解決方法

    Maven導(dǎo)入依賴時爆紅的幾種解決方法

    使用idea建立maven項目,maven導(dǎo)入依賴報紅,本文主要介紹了Maven導(dǎo)入依賴時爆紅的幾種解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Java設(shè)計模式之單例模式示例詳解

    Java設(shè)計模式之單例模式示例詳解

    單例模式是最簡單也是最基礎(chǔ)的設(shè)計模式之一,單例模式確保某個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。本文將通過一些示例代碼為大家詳細(xì)介紹一下單例模式,感興趣的可以了解一下
    2021-12-12

最新評論

奎屯市| 梓潼县| 望谟县| 平阳县| 龙南县| 嘉禾县| 南雄市| 南漳县| 夏津县| 黄浦区| 平顶山市| 呈贡县| 永平县| 营口市| 鲁山县| 浦江县| 乌拉特中旗| 鄂托克旗| 额尔古纳市| 满城县| 昂仁县| 南涧| 平度市| 大丰市| 沭阳县| 察雅县| 荔波县| 长丰县| 商都县| 合川市| 随州市| 延安市| 香河县| 沂源县| 大邑县| 中卫市| 宁都县| 浠水县| 剑川县| 赣州市| 叶城县|