如何在Spring MVC中的同一页面上显示错误消息

时间:2014-03-26 14:45:36

标签: spring jsp spring-mvc

我正在使用表单数据调用spring mvc中的控制器。

在保存之前,我会检查id是否在某个范围内。如果ID不在范围内,我需要在同一页面上显示The id selected is out of Range, please select another id within range的消息。

我在互联网上找到了样本,如果出现问题,我可以将其重定向到失败的jsp。但是我的情况怎么办呢?

@RequestMapping(value = "/sendMessage")
public String sendMessage(@ModelAttribute("message") Message message,
        final HttpServletRequest request) { 
    boolean check = userLoginService.checkForRange(message.getUserLogin());
    if(!check){
        return "";  //What Should I do here??????
    }
}

2 个答案:

答案 0 :(得分:15)

一种简单的方法是将您的错误消息添加为模型属性。

@RequestMapping(value = "/sendMessage")
public String sendMessage(@ModelAttribute("message") Message message,
        final HttpServletRequest request, Model model) {

    boolean check = userLoginService.checkForRange(message.getUserLogin());
    if(!check){
        model.addAttribute("error", "The id selected is out of Range, please select another id within range");
        return "yourFormViewName";
    }
}

然后你的jsp可以显示“error”属性(如果存在)。

<c:if test="${not empty error}">
   Error: ${error}
</c:if>

修改

这是一个粗略的,未经测试的ajax验证实现。 JQuery假设。

为要点击的ajax添加请求映射:

@RequestMapping("/validate")
@ResponseBody
public String validateRange(@RequestParam("id") String id) {

    boolean check = //[validate the id];
    if(!check){
        return "The id selected is out of Range, please select another id within range";
    }
}

在客户端拦截表单提交并验证:

$(".myForm").submit(function(event) {

    var success = true;

    $.ajax({
        url: "/validate",
        type: "GET",
        async: false, //block until we get a response
        data: { id : $("#idInput").val() },
        success: function(error) {
            if (error) {
                $("#errorContainer").html(error);
                success = false;
            }
        }
    });

    return success;

});

答案 1 :(得分:7)

您还可以使用现有的错误消息支持。这样,您可以使用spring-mvc错误标记在全局上下文甚至在字段级别显示错误。例如,如果您假装将错误绑定到字段,则可以使用:

@RequestMapping(value = "/sendMessage")
public String sendMessage(@ModelAttribute("message") Message message, BindingResult bindingResult) {
    boolean check = userLoginService.checkForRange(message.getUserLogin());
    if (!check) {
        bindingResult.rejectValue("userLogin", "error.idOutOfRange", "The id selected is out of Range, please select another id within range");
        return "jspPage"; // path to the jsp filename, omit extension (considering default config) 
    }
}

在页面级别,您可以执行以下操作:

<form:form method="POST" commandName="message">
    ...
    <form:input path="userLogin" />
    <form:errors path="userLogin" />
    ...
</form:form>

如果您只想显示全局错误,请在bindingResult.rejectValue和form:errors标记处省略参数名称。

注意:您无需担心手动恢复参数。在正常情况下,spring-mvc会为你处理。

希望它有所帮助。