Перейти к основному содержимому

Несколько кнопок отправки в форме

· 3 мин. чтения

1. Обзор

В этом кратком руководстве мы продолжим работу с формами в Spring MVC и добавим еще одну кнопку в форму JSP , сопоставленную с тем же URI.

2. Краткое резюме

Ранее мы создали небольшое веб-приложение для ввода сведений о сотруднике и сохранения их в памяти.

Сначала мы написали модель Employee для привязки объекта, затем EmployeeController для обработки потока и сопоставлений и, наконец, представление с именем employeeHome , которое описывает форму, в которой пользователь может вводить входные значения.

В этой форме была единственная кнопка Submit , которая сопоставлялась с RequestMapping контроллера с именем addEmployee , чтобы добавить данные, введенные пользователем, в базу данных в памяти с использованием модели.

В следующих нескольких разделах мы увидим, как добавить еще одну кнопку 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>
...

Как мы видим, мы добавили имя атрибута к существующей кнопке « Отправить » и добавили еще одну кнопку « Отмена » с именем , заданным для отмены `` .

Мы также добавили сообщение об атрибуте модели вверху страницы, которое будет отображаться, если и когда будет нажата кнопка « Отмена ».

4. Контроллер

Затем давайте изменим контроллер, чтобы добавить новый параметр атрибута в 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 . Примечательно, что его значение совпадает с именем , указанным в форме.

Затем мы добавили еще один метод cancel с похожей сигнатурой, с той лишь разницей, что параметры params указаны как cancel . Как и прежде, это точно такое же значение, как имя кнопки Cancel в JSP-форме.

5. Тестирование

Для тестирования мы развернем проект в веб-контейнере, таком как Tomcat.

При переходе по URL-адресу http://localhost:8080/spring-mvc-forms/employee нам будет представлено :

./4fda57ae3e30ee599adc0a1803458ecd.png

После нажатия Cancel мы увидим:

./980466ffd33391f1c815967b250d0905.png

Здесь мы видим сообщение, которое мы закодировали в методе контроллера cancel .

Нажав « Отправить », мы видим введенную информацию о сотруднике , как и раньше :

./f215b149dbfac76446bd47d06b7c4da1.png

6. Заключение

В этом руководстве мы узнали, как добавить еще одну кнопку в ту же форму в приложении Spring MVC , которая сопоставляется с тем же RequestMapping на контроллере.

При необходимости мы можем добавить больше кнопок, используя ту же технику, что и в фрагментах кода .

Как всегда, исходный код доступен на GitHub .