`
郑云飞
  • 浏览: 814581 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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>  
分享到:
评论

相关推荐

    spring validate 笔记

    如果验证失败,`bindingResult`会包含错误信息。 3. **自定义验证**: 自定义验证涉及到实现`org.springframework.validation.Validator`接口。你需要创建一个类并实现`validate`方法,该方法接收要验证的对象和`...

    springMVC整合hibernate的校验Validation

    如果存在验证失败的情况,bindingResult将包含错误信息。 为了自定义全局的错误消息处理,我们可以在Spring MVC的配置中定义一个HandlerExceptionResolver,例如使用`HandlerExceptionResolverAdapter`: ```java ...

    spring_validator验证

    在这里,如果用户提交的数据不符合`User`类上的验证规则,`BindingResult`对象将包含验证错误信息,可以进一步处理这些错误。 ### 四、自定义Validator 虽然JSR-303/349提供了一系列通用的验证注解,但有时我们...

    java后端验证框架源码

    通常,验证框架会提供自定义错误消息的功能,允许开发者设置特定的错误提示文本。在JSON响应中,可以将错误信息映射到一个字段,如`errors`,前端根据这个字段来显示错误。 5. **Spring与JDOM** Spring是Java企业...

    validation-api-1.1.0.cr1.jar

    4. **处理验证结果**:如果验证失败,可以通过`BindingResult`获取错误信息,如错误字段名和错误消息,然后反馈给用户。 此外,JSR303还支持自定义验证注解和验证器,这使得我们可以根据具体业务需求扩展验证功能。...

    springMVC Validator表单验证

    `validate()`方法用于验证对象,如果验证失败,它会将错误信息添加到`Errors`或`BindingResult`对象中。 2. **国际化支持**:项目中提到的支持国际化意味着,错误消息可以根据用户的语言设置显示不同的文本。这通常...

    Hibernate validator使用以及自定义校验器注解

    如果对参数校验发现有误,会将错误注入到 BindingResult 中。 ``` @Valid public void test(@Valid User user, BindingResult bindingResult) { if (bindingResult.hasErrors()) { List&lt;ObjectError&gt; errors = ...

    springmvc验证需要的jar

    此外,`BindingResult`对象用于存储验证结果,可以用来处理错误信息。你需要确保Spring MVC的jar包也包含在类路径中。 4. **使用示例**: 在模型类中,你可以定义验证规则: ```java public class User { @Not...

    大三(二)springmvc数据校验.zip

    3. **全局错误处理**:当校验失败时,Spring MVC 可以通过 `BindingResult` 对象获取校验错误信息。为了提供统一的错误响应,我们可以配置一个全局异常处理器,捕获 `MethodArgumentNotValidException` 异常,然后...

    lib-SpringValidator

    如果存在验证错误,`BindingResult`将包含错误信息。 4. **HandlerAdapter和HandlerExceptionResolver**:SpringMVC的`HandlerAdapter`处理请求并调用控制器方法,而`HandlerExceptionResolver`负责处理包括验证...

    [其他类别]网页中文本框自校验的标签_input.zip

    这段代码会检查`User`对象中的所有字段,如果不符合验证规则,`BindingResult`将包含错误信息,从而返回错误响应。 此外,还可以使用AJAX技术实现实时的前端验证,通过JavaScript发送异步请求到服务器,获取验证...

    SpringMVC杂记(五) JSR303数据验证

    如果验证失败,Spring会自动创建一个包含错误信息的`BindingResult`对象,开发者可以通过这个对象获取并显示错误信息。 为了实现JSR303验证,我们需要在项目中引入相关的依赖,比如Hibernate Validator,它是JSR303...

    MethodLevelValidation.zip

    public String createUser(@Valid User user, BindingResult bindingResult) { if (bindingResult.hasErrors()) { // 处理错误,返回错误信息 } else { // 保存用户 } } ``` 以上就是SpringMVC Controller...

    SpringMVC入门很简单之数据验证

    开发者可以通过`BindingResult`获取错误信息,并决定如何呈现给用户,例如重定向到错误页面或显示错误消息。 4. **整合Hibernate Validator** Hibernate Validator是Bean Validation的实现,可以与SpringMVC无缝...

    SpringMVC数据验证——注册用户格式的验证实例

    在这个例子中,如果用户名为空、密码长度不符合要求或电子邮件格式不正确,`BindingResult`对象将包含相应的错误信息。我们可以在视图层(如JSP或Thymeleaf)中遍历这些错误,并显示给用户。 为了提高代码的可重用...

    spring mvc校验

    `BindingResult`参数用于捕获验证结果,如果表单数据不合法,Spring MVC会自动填充错误信息。 `BeanUtils.java`通常包含了一些实用工具方法,比如对象复制或者转换。在数据校验场景下,这些工具方法可能用于将校验...

    springMVC3.2实现后台校验

    在上面的例子中,`@Valid`注解会触发对`User`对象的校验,如果校验失败,`BindingResult`对象将包含校验错误信息。我们可以检查`BindingResult`来决定是否继续处理请求,或者向用户返回错误消息。 除了使用预定义的...

    hibernate-validator

    当提交表单时,Spring MVC会调用`hibernate-validator` 进行验证,如果有错误,`BindingResult`对象会包含这些错误信息,可以用来显示错误提示。 总之,`hibernate-validator` 通过提供简单易用的API和注解,极大地...

    springMVC拦截器

    3. **BindingResult**:在表单提交场景中,使用 `@Validated` 注解验证模型对象,并通过 BindingResult 获取验证错误信息。 4. **自定义异常类型**:创建自定义异常类型并包含错误信息,然后在处理器中抛出。 ### ...

    ssm中hibernate-validator后台注册验证

    如果验证失败,Spring会自动将错误信息填充到`BindingResult`对象中。例如: ```java @PostMapping("/register") public String register(@Valid User user, BindingResult bindingResult) { if (bindingResult....

Global site tag (gtag.js) - Google Analytics