SSM使用验证器

    xiaoxiao2022-07-07  196

    之前其实看视频学习ssm框架的时候有学过,但是只是跟着敲代码,然后代码的记录也不认真。导致想用的时候连代码都不知道在哪,这就是学习的不足吧。在此,再次进行记录一番。。 只用了一个字段作为例子。测试在bishe项目中。

    1 在springMVC配置文件配置添加如下信息

    <!-- 配置校验器 --> <!-- 校验器 --> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <!-- 校验器--> <property name="providerClass" value="org.hibernate.validator.HibernateValidator" /> <!-- 指定校验使用的资源文件,如果不指定则默认使用classpath下的ValidationMessages.properties --> <property name="validationMessageSource" ref="messageSource" /> </bean> <!-- 校验错误信息配置文件 --> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <!-- 资源文件名--> <property name="basenames"> <list> <value>classpath:config/UserValidationMessages</value> </list> </property> <!-- 资源文件编码格式 --> <property name="fileEncodings" value="utf-8" /> <!-- 对资源文件内容缓存时间,单位秒 --> <property name="cacheSeconds" value="120" /> </bean>

    这个配置的信息是我之前的一个博客的,但是用的时候却发现很多不足的地方。 首先是不知道放在哪,位置不确定。然后是对应的错误信息UserValidateionMessages.properties的路径如何加载也不知道怎么写。 最后加载信息如何显示到前端也没有进行记录。。可见博客写的很水。。

    2 新建对应的错误配置信息

    文件放在了src/config包下。名称为:UserValidationMessages.properties

    user.username.length.error=请输入3-8个字符的用户名

    3 JavaBean中添加如何注解

    这里只以username为例。如果不配置错误信息的存放位置的话,可以不用单独建立对应的properties文件写错误信息,直接在字段上面的message属性中写入对应的错误信息即可,对应的配置时也不需要指定专门的属性文件。

    package com.model; import javax.validation.constraints.Size; public class User { private Integer uid; @Size(min=3,max=8,message="{user.username.length.error}") private String username; private String password; private String checkPwd; private String email; public Integer getUid() { return uid; } public void setUid(Integer uid) { this.uid = uid; } public String getCheckPwd() { return checkPwd; } public void setCheckPwd(String checkPwd) { this.checkPwd = checkPwd; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "User [uid=" + uid + ", username=" + username + ", password=" + password + ", getUid()=" + getUid() + ", getUsername()=" + getUsername() + ", getPassword()=" + getPassword() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString() + "]"; } }

    4 在控制器方法中添加验证

    @RequestMapping("/login") public ModelAndView userLogin(HttpServletRequest request,@Validated User user,BindingResult result,HttpSession session){ Map<String,Object> map = new HashMap<String,Object>(); if(result.hasErrors()) { List<FieldError> errors = result.getFieldErrors(); for(FieldError fieldError : errors) { map.put(fieldError.getField(),fieldError.getDefaultMessage()); } ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("fieldError", map); modelAndView.setViewName("/login"); return modelAndView; }

    以上代码只是处理以及对应的跳转代码。@Valid User user 注解user.对表单提交过来user这个bean进行校验,返回结果给BindingResult result这个对象,在result.hasErrors()中循环把错误信息添加到map对象里面返回到login.jsp

    5 login.jsp错误信息显示

    找个地方加上对应的错误信息即可。

    <!-- 显示错误信息 --> <c:if test="${fieldError!=null }"> ${fieldError.username} </c:if>

    详情参考

    注意

    经过测试,之前博客中将校验器引入到开启驱动中这一步,

    <mvc:annotation-driven conversion-service="conversionService" validator="validator"></mvc:annotation-driven>

    如果不用配置文件的话(就是直接在字段上面定义错误消息),可以直接为

    <mvc:annotation-driven />

    这时候的validator="validator"可以省略,因为没起作用。 不然的话,不能够解析出对应的定义的错误信息提示。

    最新回复(0)