表單上的多個提交按鈕
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上獲得。