简体   繁体   中英

Spring MVC - Handling Errors, Form Submits with Multiple forms

I have a .JSP file that has three forms on it whose fields are dynamically shown/hidden based on user interaction with Javascript/Jquery elements.The forms are spring forms sending their action to a URL that matches a controller.

The issue is that when I submit a form, and it does not validate, the URL the form submitted to stays in the URL. Then any action I take that is URL dependent is basically corrupted because the URL has the form action appended to it.

For example, if my .JSP's normal URL is /admin/ , and my spring form is:

<form:form id="form" method="POST" action="${pageContext.request.contextPath}/admin/createUser" modelAttribute="User">

If validation fails my URL will now be /admin/createUser . If I am then taking some action using Javascript/Jquery the URL is no longer a valid way to navigate. I could just work around the URL but it just seems...un-ideal.

I have tried using redirects like: "redirect:/admin/" , but spring validation will not work with this because you are basically just reloading the page.

Are there any best-practice or "elegant" solutions to this, or something really simple that I'm overlooking?

The redirection should probably be done on the client side anyways with a param of returnToURL, and as for error handling in Spring, you can register method as error handler to return proper error responses:

class YourController {

    /**
    * see @link{org.springframework.web.bind.annotation.ExceptionHandler}
    */
    @ExceptionHandler(Exception.class)
    public @ResponseBody String handleException(Exception e, HttpServletResponse rsp) {
        // set the response status
        return "{\"error\" : ...}"'
    }
}

If you get error you can return error message to a custom error page to display the error message. or in your case you can return the admin page again.. here is some example code .


 @RequestMapping(value = "/createUser" ,method = RequestMethod.POST) public ModelAndView create(@ModelAttribute User user) { if(user == null){ Map<String, String> model = new HashMap<String, String>(); model.put("errorCode", "00"); model.put("errorText", "Error Message Here"); return new ModelAndView("error_page", model); } return new ModelAndView("Welcome_page"); } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM