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

springmvc校验

2016-02-18 19:26 429 查看
springmvc校验使用hibernate的校验框架validation

校验思路:

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

小小实例:

商品修改,添加校验(检验商品名称长度,生产日期的非空校验),如果校验出错,在商品修改页面显示错误信息。

1、环境准备

validation校验框架所需要的jar包:



2、在springmvc.xml配置校验器并且将检验器注入到处理器适配器中

<pre name="code" class="html">	<!-- 校验器 -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!-- hibernate校验器 -->
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
<!-- 指定校验使用的资源文件,在文件中配置校验错误信息 ,如果不指定则默认使用classpath下的ValidationMessages.properties-->
<property name="validationMessageSource" ref="messageSource"/>
</bean>

<!-- 校验错误信息配置文件 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<!-- 资源文件名 -->
<property name="basenames">
<list>
<value>classpath:CustomValidationMessage</value>
</list>
</property>
<!-- 资源文件编码格式 -->
<property name="fileEncodings" value="utf-8"/>
<!-- 对资源文件内容缓存时间,单位秒 -->
<property name="cacheSeconds" value="120"/>
</bean>
<mvc:annotation-driven conversion-service="conversionService"  validator="validator" ></mvc:annotation-driven>



3、在pojo中添加校验规则
package org.ssm.po;

import java.util.Date;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class Items {
private Integer id;

//校验名称在1到30字符中间
//message是提示校验出错显示的信息
//groups:此校验属于哪个分组,groups可以定义多个分组
@Size(min=1, max=30, message="{items.name/length.error}")
private String name;

private Float price;

private String pic;

//非空校验
@NotNull(message="{items.createtime.isNULL}")
private Date createtime;

private String detail;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name == null ? null : name.trim();
}

public Float getPrice() {
return price;
}

public void setPrice(Float price) {
this.price = price;
}

public String getPic() {
return pic;
}

public void setPic(String pic) {
this.pic = pic == null ? null : pic.trim();
}

public Date getCreatetime() {
return createtime;
}

public void setCreatetime(Date createtime) {
this.createtime = createtime;
}

public String getDetail() {
return detail;
}

public void setDetail(String detail) {
this.detail = detail == null ? null : detail.trim();
}
}


4、在CustomValidationMessages.properties配置校验错误信息
#添加校验错误提交信息
items.name.length.error=请输入1到30个字符的商品名称
items.createtime.isNULL=请输入商品的生产日期


5、捕获校验错误信息 ItemsController.java
@RequestMapping("/editItemsSubmit")
public String editItemsSubmit(HttpServletRequest request, Integer id, @Validated ItemsCustom itemsCustom, BindingResult bindingResult)throws Exception{
//在需要校验的pojo前面添加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息
//注意:@validated和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后)
//...
return null;
}


6、在页面显示校验错误信息,在controller类中将错误信息传到页面即可
@RequestMapping("/editItemsSubmit")
public String editItemsSubmit(Model model, HttpServletRequest request, Integer id, @Validated ItemsCustom itemsCustom, BindingResult bindingResult)throws Exception{
//在需要校验的pojo前面添加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息
//注意:@validated和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后)
//...
//获取校验错误信息
if(bindingResult.hasErrors()){
//输出错误信息
List<ObjectError> allErrors = bindingResult.getAllErrors();
for(ObjectError objectError:allErrors){
//输出错误信息
System.out.println(objectError.getDefaultMessage());
}
//将错误信息传到页面
model.addAttribute("allErrors", allErrors);
return "items/editItems";
}
return "success";
}


7、页面显示错误信息
<!-- 显示错误信息 -->
<c:if test="${allErrors != null}">
<c:forEach items="${allErrors}" var="error">${error.defaultMessage}</c:forEach>
</c:if>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: