1. 概述
本快速教程將基於 Spring MVC 中表單入門的內容,並添加一個額外的按鈕到 JSP 表單中,該按鈕映射到相同的 URI。
2. 簡要回顧
之前,我們創建了一個小型 Web 應用程序,用於輸入員工信息並將其保存在內存中。
首先,我們編寫了一個模型 Employee,用於綁定實體,然後編寫了一個 EmployeeController,用於處理流程和映射,最後,我們編寫了一個名為 employeeHome 的視圖,用於描述用户輸入值的表單。
該表單只有一個按鈕 Submit,它映射到控制器中名為 addEmployee 的 RequestMapping,用於使用模型將用户輸入的詳細信息添加到內存數據庫中。
在接下來的幾個部分中,我們將看到如何向相同的表單添加 Cancel 按鈕,並使用控制器中具有相同 RequestMapping 路徑的相同操作 。
3. 表單
首先,我們在表單 employeeHome.jsp 中添加一個新按鈕:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
...
<body>
<h3>Welcome, Enter The Employee Details</h3>
<h4>${message}</h4>
<form:form method="POST" action="${pageContext.request.contextPath}/addEmployee"
modelAttribute="employee">
<table>
...
<tr>
<td><input type="submit" name="submit" value="Submit" /></td>
<td><input type="submit" name="cancel" value="Cancel" /></td>
</tr>
...如我們所見,我們已將 name 屬性添加到現有的 提交 按鈕中,並添加了一個 取消 按鈕,其 name 設置為 cancel。
我們還添加了一個模型屬性 message 在頁面的頂部,當 取消 被點擊時,該屬性將被顯示。
4. 控制器
接下來,讓我們修改控制器以添加一個新的屬性 param 到 RequestMapping 以區分兩個按鈕的點擊:
@RequestMapping(value = "/addEmployee", method = RequestMethod.POST, params = "submit")
public String submit(@Valid @ModelAttribute("employee") final Employee employee,
final BindingResult result, final ModelMap model) {
// same code as before
}
@RequestMapping(value = "/addEmployee", method = RequestMethod.POST, params = "cancel")
public String cancel(@Valid @ModelAttribute("employee") final Employee employee,
final BindingResult result, final ModelMap model) {
model.addAttribute("message", "You clicked cancel, please re-enter employee details:");
return "employeeHome";
}在此,我們添加了一個新的參數 params 到現有的 submit 方法中。 值得注意的是,它的值與表單中指定的 name 相同。
然後我們添加了另一個方法 cancel,具有相似的簽名,唯一的區別是參數 params 被指定為 cancel。 就像之前一樣,這與 JSP 表單中 Cancel 按鈕指定的 name 相同。
5. 測試
為了進行測試,我們將部署項目到 Web 容器,例如 Tomcat。
訪問 URL http://localhost:8080/spring-mvc-forms/employee,我們將看到:
點擊“取消”後,我們將看到:
在此,我們看到在控制器方法 cancel 中編寫的消息。
點擊“提交”後,我們將看到之前輸入的信息:
6. 結論
在本教程中,我們學習瞭如何在 Spring MVC 應用程序中,將另一個按鈕添加到同一表單中,該表單映射到控制器上的相同 `RequestMapping》。
我們可以使用與代碼片段中演示相同的技術,根據需要添加更多按鈕。