温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用BindingResult自定义错误信息

发布时间:2021-10-25 17:18:19 来源:亿速云 阅读:184 作者:iii 栏目:开发技术

本篇内容介绍了“如何使用BindingResult自定义错误信息”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目录
  • BindingResult 自定义错误信息

    • 前提概要

    • 基础框架

    • 配置文件和Java代码的修改

    • 在Controller方法中指定需要进行校验

    • 进行自定义校验

    • 在JSP页面上显示校验错误信息

  • BindingResult错误返回显示失败

    BindingResult 自定义错误信息

    前提概要

    在Spring MVC和FreeMarker整合的项目中,采用JSR-303验证框架,通过注解的方式进行数据验证

    基础框架

    MVC:Spring MVC 3

    视图:FreeMarker

    验证:Hibernate-validator实现

    配置文件和Java代码的修改

    在Spring MVC配置文件中添加配置

    添加以下mvc的注解驱动配置,一切变成“自动化”

    <mvc:annotation-driven />

    在JavaBean中添加数据校验的注解

    其中@Length、@email就是Hibernate-validator中的数据校验注解,还可以用javax.validation中的注解,比如@NotNull

    public class SystemUser {  
        @Length(min = 5, max = 20, message = "用户名长度必须位于5到20之间")  
        private String userName;   
        @Email(message = "比如输入正确的邮箱")  
        private String email;  
    }

    在Controller方法中指定需要进行校验

    首先,要在需要进行校验的Bean前面加上@Valid注解,告诉SpringMVC框架这个Bean需要进行校验;

    同时,还要在需要校验的Bean前面加上@modelattribute注解,从而将Bean暴露给视图,并且指定名字,这有两个作用,第一是显示校验错误需要使用这个名字,第二个是返回原来的页面以后,前面输入的所有值还要显示出来;

    其次,每个需要校验的Bean后面紧跟一个BindingResult,SpringMVC框架会将校验结果保存在它里面,通过hasErrors方法可以判断是否有校验错误;

    最后,当返回到原页面以后,SpringMVC框架还会将所有校验错误信息保存在上下文中,供页面上取得校验错误,Spring提供了一套JSP自定义标签。

    @RequestMapping(value = "/create.html", method = RequestMethod.POST)  
    public String doCreateUser(  
            @Valid @ModelAttribute("userDetail") SystemUser user,  
            BindingResult bindingResult,  
            HttpServletRequest request) {  
        // 如果有校验错误,返回添加用户的页面  
        if (bindingResult.hasErrors()) {  
            return "/user/create";  
        }        
        this.userService.createUser(user);  
        return "/user/list.html";  
    }

    进行自定义校验

    如果需要添加自定义校验,比如验证用户名是否已经被使用了,那么简单的注解自然无能为力,需要自己编码实现,如果校验失败,可以手动将自定义校验错误添加到BindingResult中。

    @RequestMapping(value = "/user/create.html", method = RequestMethod.POST)  
    public String doCreateUser(  
            @Valid @ModelAttribute("userDetail") SystemUser user,  
            BindingResult bindingResult,  
            HttpServletRequest request) {  
        // 如果有数据校验错误,返回添加用户的页面  
        if (bindingResult.hasErrors()) {  
            return "/user/create";  
        }    
        boolean isUserNameExist = this.userService.checkUserByUserName(user.getUserName());  
        // 如果用户名已存在,返回添加用户的页面  
        if (isUserNameExist) {  
            // 向BindingResult添加用户已存在的校验错误  
            bindingResult.rejectValue("userName", "该用户名已存在", "该用户名已存在");  
            return "/user/create";  
        }        
        this.userService.createUser(user);  
        return "/user/list.html";  
    }

    在JSP页面上显示校验错误信息

    返回页面以后,SpringMVC框架将所有校验错误信息都放在了上下文中,可以自己去取出来,但是那样非常麻烦,不过没关系,Spring提供了一套自定义标签,可以方便的显示校验错误信息。

    页面头部需要导入Spring的自定义标签库

    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

    需要一次性显示全部校验错误

    (commandName的值就是@modelattribute注解中指定的值)

    <form:form commandName="userDetail"> 
    <form:errors path="*" cssStyle="color:red"></form:errors> 
    </form:form>

    需要在对应输入框的后面显示单个校验错误

    (通过path指定显示那个具体的校验错误,userDetail正是@modelattribute注解中指定的值,而点号后面则是指定显示Bean中哪个属性的校验错误)

    <input type="text" name="userName" value="${userDetail.userName}" > 
    <form:errors path="userDetail.userName" cssStyle="color:red"></form:errors> 
    <input type="text" name="email" value="${userDetail.email}"> 
    <form:errors path="userDetail.email" cssStyle="color:red"></form:errors>

    BindingResult错误返回显示失败

    作为一个初学者经常犯低级错误,特别是没有老师的情况下。绊了一整天,不过找到原因了

    如果redirect跳转回造成参数丢失

    此时可以设置返回参数为Object

    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public Object test(HttpServletRequest request, Model model, @Validated User user, BindingResult bindingResult)
    throws Exception {
    if (bindingResult.hasErrors()) {
    return "user/save";
    }
    user.setVersion(0);
    return new ModelAndView("redirect:/user/list");
    }

    “如何使用BindingResult自定义错误信息”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI