Is there any way to create form with multiple submit buttons on Spring MVC using annotations?
16,286
Solution 1
With Spring MVC 3, this is reasonably straight-forward to do with just JSP and Controller. For example, these two submit buttons handle 'previous' and 'save' actions:
<input value="Save" name="save" type="submit" id="btnSave" class="submit_button">
<input value="Previous" name="previous" type="submit" id="btnPrevious" class="submit_button">
Then, in the controller, you accept the input name as a param in the request mapping, along with the controller 'address':
@RequestMapping(value="thisForm.form", params="save")
public String save() {
// save
}
@RequestMapping(value="thisForm.form", params="previous")
public String doPreviousStuff() {
// get mapping for previous page and return
}
Solution 2
If you really want two submit buttons on your form, you can do it with Javascript like this (using jQuery in this example):
<SCRIPT language=JavaScript>
function remove() {
$('#editForm').attr("action", "documentTypeRemove.do");
$("#editForm").submit();
}
</SCRIPT>
...
<button type="button" onclick="remove();">Remove</button>
Then create another RequestMapping in your controller:
@RequestMapping(value = "/books/documentTypeRemove.do", method = RequestMethod.POST)
public String removeDocType(...
Author by
Koguro
Updated on June 04, 2022Comments
-
Koguro almost 2 years
I'm trying to create simple add/remove form using annotation based Spring MVC. 'Add' functionality comes smoothly, but when I tried to add another button to form i've got stuck.
Here is my code:
Controller actions:
@RequestMapping(value = "/books/documentType.do", method = RequestMethod.GET) public String getDocType( @RequestParam(required = false, value = "id") Long id, ModelMap model) { DocTypeDTO docType = new DocTypeDTO(); if (id != null) docType = docTypeConverter.getDTO(id); model.addAttribute("docType", docType); return "/books/documentType"; } @RequestMapping(value = "/books/documentType.do", method = RequestMethod.POST) public String setDocType( @ModelAttribute("docType") DocTypeDTO docType, BindingResult result, SessionStatus sessionStatus ) { docTypeValidator.validate(docType, result); if (result.hasErrors()) return "/books/documentType"; else { docTypeConverter.saveDTO(docType); sessionStatus.setComplete(); return "redirect:/books/documentTypes.do"; } }
Awfully markuped form:
<form:form method="post" commandName="docType" id="editForm"> <table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#dbdbdb"> <tr> <td></td> <td> <table border="0" cellspacing="0" cellpadding="0" width="100%"> <tr> <td class="spacer"><img src="/images/spacer.gif" width="116" height="1" border="0"/></td> <td class="spacer"><img src="/images/spacer.gif" width="216" height="1" border="0"/></td> </tr> <tr> <td class="form-cell-text-underlined">Отображать на сайте</td> <td colspan="2"> <form:checkbox path="shownOnSite"/> </td> </tr> <tr> <td class="form-cell-text-underlined">Международный</td> <td colspan="2"> <form:checkbox path="international"/> </td> </tr> <tr> <td class="form-cell-text-underlined">Внутренний код</td> <td colspan="2"> <form:input path="internalCode"/> </td> </tr> <tr> <td class="form-cell-text-underlined">Код</td> <td colspan="2"> <form:input path="code"/> <form:errors path="code"/> </td> </tr> <tr> <td class="form-cell-text-underlined">Код IATA</td> <td colspan="2"> <form:input path="codeIATA"/> </td> </tr> <tr> <td class="padded-underlined">Название</td> <td colspan="2"> <form:input path="name"/> <form:errors path="name"/> </td> </tr> <tr> <td class="padded-underlined">Название(Англ.)</td> <td colspan="2"> <form:input path="nameEn"/> </td> </tr> <tr> <td colspan="3"> <input type="submit" value="Сохранить"> </td> </tr> </table> </td> <td></td> </tr> </table>
Thanks!