2015-12-03 95 views
0

我有一个.JSP文件,它有三种形式,其字段根据用户与Javascript/Jquery元素的交互动态显示/隐藏。形式是发送它们的弹簧形式操作到与控制器相匹配的URL。Spring MVC - 处理错误,表单提交多种形式

问题是,当我提交表单并且它没有验证时,表单提交的URL保留在URL中。然后,我采取的任何与URL相关的操作基本上都会损坏,因为URL具有附加到表单的操作。

例如,如果我.JSP的正常网址是/admin/,我的春天的形式是:

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

如果验证失败,我的网址现在将/admin/createUser。如果我正在使用Javascript/Jquery进行一些操作,则URL不再是有效的导航方式。我可以只是围绕网址工作,但似乎......不理想。

我已经尝试使用重定向,如:"redirect:/admin/",但弹簧验证不会与此工作,因为你基本上只是重新加载页面。

是否有任何最佳实践或“优雅”的解决方案,或者我忽略了一些非常简单的东西?

回答

0

重定向可能应该在客户端完成反正有returnToURL的PARAM,并以此为错误在Spring处理,可以作为错误处理程序来注册方法返回正确的错误响应:

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\" : ...}"' 
    } 
} 
0

如果如果出现错误,您可以将错误消息返回到自定义错误页面以显示错误消息。或者在你的情况下,你可以再次返回管理页面。 这里是一些示例代码。


@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"); 
 
    }