springmvc校验,错误信息显示及数据回显

来源:互联网 发布:impacket python 编辑:程序博客网 时间:2024/06/15 07:50

springmvc使用hibernate的校验框架validation进行校验
校验思路:
页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面。

1, 环境准备
引入hibernate的校验框架validation所需要jar包

2, 配置文件

<!-- validator校验器注入到适配器 -->    <mvc:annotation-driven conversion-service="conversionService"    validator="validator"></mvc:annotation-driven>    <!-- 校验器 -->    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">        <!-- hibernate校验器 -->        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>        <!-- 指定存放校验信息的文件 -->        <property name="validationMessageSource" ref="messageSource"></property>    </bean><!-- 校验信息文件 -->    <bean id="messageSource"     class="org.springframework.context.support.ReloadableResourceBundleMessageSource" name="messageSource">        <!-- 文件路径 -->        <property name="basenames">            <list>                <value>classpath:messages</value>            </list>        </property>        <!-- 资源文件编码格式 -->        <property name="defaultEncoding" value="UTF-8"></property>        <!-- 资源文件内容缓存时间 -->        <property name="cacheSeconds" value="120"></property>    </bean>

3, pojo中添加校验规则

package ssm.po;import javax.validation.constraints.Size;import org.hibernate.validator.constraints.NotBlank;public class Customer {    private Integer cid;    @NotBlank(message="{customer.name.valid}")    private String name;    @Size(min=11,max=11,message="{customer.phone.valid}")    private String phone; }

4, 编写校验信息文件messages.properties

NotNull.date=日期不能为空customer.name.valid=请输入客户姓名customer.phone.valid=请输入有效的手机号

5, controller中捕获错误信息

//在需要校验的pojo前边添加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息    //注意:@Validated和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后)。    //@ModelAttribute("customer")可以进行数据回显,也就是数据提交后,如果出现错误,将刚才提交的数据回显到刚才的提交页面。@RequestMapping("/add")    public String add(@Validated @ModelAttribute("customer") Customer customer,BindingResult bindingResult){        if(bindingResult.hasErrors()){//          List<FieldError> errors=bindingResult.getFieldErrors();//          model.addAttribute("customer", customer);            return "customer/add";        }        customerService.add(customer);        return "redirect:list";    }

6, 页面显示错误信息
前台进行错误显示,可以使用springmvc自带的标签库,我这里混用了sf标签和html标签,做法不太可取,容易乱。

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><%@taglib prefix="sf"  uri="http://www.springframework.org/tags/form"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title></head><body>    <sf:form action="${pageContext.request.contextPath }/customer/add" method="post" modelAttribute="customer">        <table>        <TR>            <td>客户姓名:</td>            <td>            <INPUT name="name" value="${customer.name }">*<sf:errors path="name"></sf:errors>            </td>                               </TR>        <TR>            <td>联系方式:</td>            <td>            <INPUT name="phone" value="${customer.phone }">*<sf:errors path="phone"></sf:errors>            </td>        </TR>        <tr>            <td rowspan=2>            <INPUT class=button id=sButton2 type=submit value=" 添加 " name=sButton2>            </td>        </tr>    </sf:form>    </table></body></html>

如果我们要使用@Validate进行验证,并且需要在前台通过sf:error来显示错误信息,那么我们一定要用sf:form,并且设置modelAttribute=”customer”,它的属性值,必须为小写的类型名 ,表单中的其他标签是否使用 sf: 都可以。

7,页面显示如下

这里写图片描述

原创粉丝点击