【问题标题】:How to manage error message in Spring MVC如何在 Spring MVC 中管理错误消息
【发布时间】:2014-02-05 03:04:18
【问题描述】:

我是 Spring MVC 的新手。我的 abc 页面只有一个提交按钮。单击提交按钮时,将调用位于 xyzController 内的 abcHandler。 只是想知道如何实现这种情况。

-- 如果发生错误,它应该返回一些消息。
-- 它应该留在同一页,对我来说是它的 abc 页。

我已经尝试过了。我面临的问题是,我收到警报消息“你必须有东西......”, 但它正在导航到错误页面意味着一个空白页面。这不应该发生。我想显示消息并留在同一页面上。 如何使用 Spring MVC 轻松实现。 请提出一些想法。

public class xyzController extends MultiActionController implements InitializingBean {

public ModelAndView abcHandler(HttpServletRequest request,HttpServletResponse response)throws Exception  {

// session
HttpSession session = request.getSession(true);

String abc = "";
if(abc != ""){

}else{
String error = "You must have xyzzzzzz";
return new ModelAndView("2.0/error", "downloaderror", error);
}

return new ModelAndView();
}
}

我的error.jsp是这样的

<!DOCTYPE html>
<html>
<head>
<script src="abc/js/jquery-1.9.0.min.js"></script>
</head>
<body>
<c:if test="${not empty downloaderror}">
<script>
    alert("You must have something...");        
</script>
</c:if>
</body>
</html>

【问题讨论】:

  • 您的abc != "" 比较将始终解析为true。将其更改为"".equals(abc)abc.isEmpty() 你知道它不能是null
  • 你说你正在提交一些东西。如果您使用的是表单,则应使用BindingResult 进行验证并通过&lt;form:errors path="property" /&gt; 显示错误

标签: java spring jsp spring-mvc


【解决方案1】:

验证失败时不要返回错误页面,而是返回同一页面,因此您在 else 块中的代码应该是

}else{ String error = "You must have xyzzzzzz";
        return new ModelAndView("2.0/error", "downloaderror", abc); }

并且还将错误消息存储在模型映射中,针对“errormsg”之类的键,并在您的 abc 页面上检查该键,然后打印消息。

【讨论】:

    【解决方案2】:

    像这样在控制器方法中添加错误标志

    public ModelAndView abcHandler(HttpServletRequest request, HttpServletResponse response)throws Exception  {
    
     ModelAndView model=new ModelAndView();
     model.addObject("error", true);
    
     return model;
    
    }
    

    在 JSP 中

    <!DOCTYPE html>
    <html>
    <head>
    <script src="abc/js/jquery-1.9.0.min.js"></script>
    </head>
    <body>
    <c:if test="${error}">
    <script>
      alert("You must have something...");        
    </script>
    </c:if>
    </body>
    </html>
    

    【讨论】:

    • ModelAndView 类型的方法 addAttribute(String, boolean) 未定义。为什么会这样?我使用的是旧版本的 Spring 框架还是什么?
    • 使用addObject方法添加属性参数。
    • 我试过了,我现在收到这个错误:ModelAndView [ModelAndView: materialized View is [null]; model is {error=true}] servlet 中既不包含视图名称也不包含名称为“XXXXX”的视图对象
    • 您收到此错误是因为您没有设置视图。像这样 model.setView("home"); 为模型对象设置视图。现在这个控制器将搜索 home.jsp 如果存在,否则它会抛出一个异常。
    • 是的,我已经尝试过了,它可以按您的预期工作,但是,我的按钮在表单内,并且表单正在执行调用此 abc 处理程序的操作,并且 url 不同,所以它将空白页。
    【解决方案3】:

    您可以自行实现HandlerExceptionResolver。参考本教程:http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

    【讨论】:

    • 我试过了,我现在收到这个错误:ModelAndView [ModelAndView: materialized View is [null]; model is {error=true}] servlet 中既不包含视图名称也不包含名称为“XXXXX”的视图对象
    【解决方案4】:

    您可以通过以下方式实现该场景:

    import org.springframework.web.servlet.ModelAndView; 
    
    public ModelAndView abcHandler(HttpServletRequest request, HttpServletResponse response)throws Exception  {
    
     ModelAndView model=new ModelAndView();
     model.addObject("ERROR_CODE", "Error Occurred");
     model.setViewName("page1");
    
     return model;
    
    }
    

    你的jsp页面如下:

    page1.jsp

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
        <!DOCTYPE html>
        <html>
    
        <body>
        <c:if test="${!empty ERROR_CODE }">
       <c:out value="${ERROR_CODE }"></c:out>
        </c:if>
        </body>
        </html>
    

    【讨论】:

    • 是的,我也尝试过,但它会转到 page1.jsp,这不应该发生。我的要求是,它应该保持在它所在的同一页面中。
    • 我的按钮在表单内,并且表单正在执行调用此 abc 处理程序的操作,并且该 url 不同,因此它将转到空白页面
    • 在视图名称中,您可以提供具有按钮的页面的名称...并且您可以将 逻辑放在同一页面上。
    猜你喜欢
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2012-06-21
    • 1970-01-01
    相关资源
    最近更新 更多