我們常用的功能,除了post和get,還有put和delete,這篇文章就介紹一下這個put的基本用法。
頁面跳轉和回顯
1. 首先,我們之前的頁面已經將添加和修改的按鈕都做好了,那么如何實現這些按鈕的功能呢,來看代碼(先是list.html的跳轉):
為了我們的添加和編輯跳轉正確,肯定要先把跳轉的請求發送正確,這里注意一下編輯的hred,我采用了拼接的方式,因為我們修改頁之前也說過,請求的路徑是/emp/{id}這種格式的,需要針對員工id來進行編輯。
<a class="btn btn-sm btn-success" href="emp" th:href="@{/emp}">添加員工</a> <a class="btn btn-sm btn-primary" th:href="@{/emp/}+${emp.id}">編輯</a>
2. 然后,我們修改員工,點進去以后的修改頁面,肯定是需要將這個員工的信息回顯,然后才修改這樣的步驟,我們先要實現這個回顯的功能:
針對每一個需要回顯的地方,我們需要對應寫出展示的value值,根據不同的標簽我們寫入不同的屬性,比如男女的選擇,我們就用th:checked,以此類推,后邊都要有對應的修改。
3. 我們在進入修改頁的時候,其實用的就是添加的頁面,而非新增一個修改頁,而且在這個添加頁要查詢才能回顯,所以,我們在controller中還要有一個對應的方法:
來看我做了哪些操作,
a. 首先查詢是get的,路徑對應了要修改員工的id;
b. 因為是查詢id,參數要有PathVariable來對應路徑傳參到請求地址中,同樣為了回顯,肯定要有Model;
c. 將需要回顯的信息加入model,比如該員工的信息,已經下邊可選的部門信息;
d. 最后,因為添加和修改公用一個頁面,我們采用重定向的方式,再次指向添加的那個路徑;
// 修改員工信息頁 @GetMapping("/emp/{id}") public String toEditPage(@PathVariable("id") Integer id, Model model) { // 查詢並回顯該員工信息 Employee employee = employeeDao.get(id); model.addAttribute("emp", employee); // 獲取部門信息 Collection<Department> departments = departmentDao.getDepartments(); model.addAttribute("departments", departments); // 回到修改頁,重寫添加頁 return "emp/add"; }
先來看回顯是否正常,打開修改頁:(沒什么問題)
信息修改和添加
上邊我們將回顯功能做出來了,接下來就是修改和添加的功能。
1. 我們在此之前,有一個問題,我們修改是ok的,可再次點擊添加,頁面就會報錯了。報錯的原因呢? 我們的添加頁是不需要查詢員工信息的,而修改頁是需要的,然而都在一個頁面了是不是就識別出現問題了呢。
所以,我們需要做這樣一個判斷,如果員工信息是空的就添加,如果不是空的就修改:
2. 另外,修改頁進去以后的按鈕,可不能是添加了,而是修改,所以,這里也改動一下,同樣的判斷
3. 以上,我們頁面的判斷完成了。接下來,我們就要用到PUT來修改了,也就是點擊修改按鈕后,原來的員工信息更新。
知識點:form表單中method只是認識post和get,所以我們要采用另一種方式來實現put:
4. 提交表單的地方,我們有兩個地方要修改:
一個是PutMappting的controller方法,一個是模板中要告知按照id來提交表單。
// 修改員工 @PutMapping("/emp") public String updateEmployee(Employee employee){ employeeDao.save(employee); // 修改完成,跳轉到列表頁 return "redirect:/emps"; }
P.S:有一個要說明的地方,我們在修改提交的時候一般會有這樣的提示:
原因是brith是錯誤的,所以我們要在配置文件中將這個日期格式化掉:
spring.mvc.date-format=yyyy-MM-dd HH:mm
這樣,我們修改和添加的功能就都OK了~