表單上的多個提交按鈕
1.概述
在本快速教程中,我們將以Spring MVC中的表單入門為基礎,並向JSP表單添加另一個按鈕,以映射到相同的URI。
2.簡短回顧
之前,我們創建了一個小型Web應用程序來輸入員工的詳細信息並將其保存在內存中。
首先,我們編寫了一個Employee模型來綁定實體,然後編寫了一個EmployeeController來處理流程和映射,最後編寫了一個名為employeeHome的視圖,該視圖描述了用戶鍵入輸入值的形式。
該表單只有一個按鈕Submit ,該按鈕映射到名為addEmployee的控制器的RequestMapping以使用該模型將用戶輸入的詳細信息添加到內存數據庫中。
在接下來的幾節中,我們將看到如何向控制器中具有相同RequestMapping路徑的相同表單添加另一個按鈕Cancel, 。
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>
...
如我們所見,我們向現有的Submit按鈕添加了一個屬性name ,並添加了另一個name設置為cancel Cancel按鈕。
我們還在頁面頂部添加了模型屬性message ,如果單擊“ Cancel ,則將顯示該message 。
4.控制器
接下來,讓我們修改控制器以向RequestMapping添加新的屬性param ,以區分兩次單擊按鈕:
@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 ,唯一的區別是指定為cancel的參數params 。和以前一樣,它與JSP表單中的“ Cancel ”按鈕的name完全相同。
5.測試
為了進行測試,我們將項目部署在Web容器(例如Tomcat)上。
在訪問URL [http://localhost:8080/spring-mvc-forms/employee](http://localhost:8080/spring-mvc-forms/employee) ,我們將看到:
點擊Cancel ,我們將看到:
在這裡,我們看到在控制器的方法cancel編碼的消息。
點擊Submit ,我們將像以前一樣看到鍵入的員工信息:
六,結論
在本教程中,我們學習瞭如何在Spring MVC應用程序中向同一表單添加另一個按鈕,該按鈕映射到控制器上的同一RequestMapping 。
如果需要,可以使用代碼片段中演示的相同技術添加更多按鈕。
與往常一樣,源代碼可以 在GitHub上獲得。