您的位置:首页 > 编程语言 > Java开发

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

2017-11-18 14:48 537 查看
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,页面显示如下

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc 校验
相关文章推荐