一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Springmvc數據回顯實現原理實例解析

Springmvc數據回顯實現原理實例解析

2020-09-23 10:50 Java教程

這篇文章主要介紹了Springmvc數據回顯實現原理實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

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

簡單數據類型數據回顯

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<form action="/addstudent" method="post">
  <table>
    <tr>
      <td>學生編號:</td>
      <td><input type="text" name="id" value="${id}"></td>
    </tr>
    <tr>
      <td>學生姓名:</td>
      <td><input type="text" name="name" value="${name}"></td>
    </tr>
    <tr>
      <td>學生郵箱:</td>
      <td><input type="text" name="email" value="${email}"></td>
    </tr>
    <tr>
      <td>學生年齡:</td>
      <td><input type="text" name="age" value="${age}"></td>
    </tr>
    <tr>
      <td colspan="2">
        <input type="submit" value="提交">
      </td>
    </tr>
  </table>
</form>

在接收數據時,使用簡單數據類型去接收:

?
1
2
3
4
5
6
7
8
@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";
}

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

實體類數據回顯

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<form action="/addstudent" method="post">
  <table>
    <tr>
      <td>學生編號:</td>
      <td><input type="text" name="id" value="${student.id}"></td>
    </tr>
    <tr>
      <td>學生姓名:</td>
      <td><input type="text" name="name" value="${student.name}"></td>
    </tr>
    <tr>
      <td>學生郵箱:</td>
      <td><input type="text" name="email" value="${student.email}"></td>
    </tr>
    <tr>
      <td>學生年齡:</td>
      <td><input type="text" name="age" value="${student.age}"></td>
    </tr>
    <tr>
      <td colspan="2">
        <input type="submit" value="提交">
      </td>
    </tr>
  </table>
</form>

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

?
1
2
3
4
5
6
7
8
9
10
11
12
@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";
}

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

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

ModelAttribute

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

  • 在數據回顯時,給變量定義別名
  • 定義全局數據

定義別名

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

?
1
2
3
4
5
6
7
8
9
10
11
12
@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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<form action="/addstudent" method="post">
  <table>
    <tr>
      <td>學生編號:</td>
      <td><input type="text" name="id" value="${s.id}"></td>
    </tr>
    <tr>
      <td>學生姓名:</td>
      <td><input type="text" name="name" value="${s.name}"></td>
    </tr>
    <tr>
      <td>學生郵箱:</td>
      <td><input type="text" name="email" value="${s.email}"></td>
    </tr>
    <tr>
      <td>學生年齡:</td>
      <td><input type="text" name="age" value="${s.age}"></td>
    </tr>
    <tr>
      <td colspan="2">
        <input type="submit" value="提交">
      </td>
    </tr>
  </table>
</form>

定義全局數據

假設有一個 Controller 中有很多方法,每個方法都會返回數據給前端,但是每個方法返回給前端的數據又不太一樣,雖然不太一樣,但是沒有方法的返回值又有一些公共的部分。可以將這些公共的部分提取出來單獨封裝成一個方法,用 @ModelAttribute 注解來標記。

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

?
1
2
3
4
5
6
7
@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;
}


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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/qiuwenli/p/13424005.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲第一天堂无码专区 | 亚洲视频在线观看免费视频 | 福利片免费一区二区三区 | 四虎影视在线看 | 51香蕉视频| 先锋资源av| 亚洲国产成人久久精品影视 | 亚洲免费视频播放 | 国产91精品露脸国语对白 | 乌克兰一级毛片 | 免费观看在线 | 91精品啪在线观看国产老湿机 | 紧身牛仔裤美女被啪啪久久网 | 亚洲国产区 | 无套暴躁白丝秘书 | 国产精品嫩草影院一二三区入口 | 成人au免费视频影院 | 免费片在线观看 | 欧美亚洲国产精品久久久 | 亚洲午夜久久久久久91 | 国产精品原创巨作无遮挡 | free chinese麻豆| 色哟哟在线资源 | 久久成人精品免费播放 | 超h 超重口 高h 污肉1v1 | 激情综合色啪啪小说 | 雪恋电影完整版免费观看 | 天天乐影院 | 日韩免费一区 | 日本三级欧美三级人妇英文 | jm漫天堂破解版 | 成人国产午夜在线视频 | 雪恋电影完整版免费观看 | 亚洲 欧美 日韩 国产 视频 | 娇小XXXXX第一次出血 | 色伦网 | 日本嫩小xxxxhd | 免费yjsp妖精com | 极端 成熟 性别 视频 | 大胸美女被c | 99热这里有免费国产精品 |