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(...      
Share:
16,286
Koguro
Author by

Koguro

Updated on June 04, 2022

Comments

  • Koguro
    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!