自定义校验信息
整体架构:
1.对类进行添加校验
package cn.itcast.ssm.po;
import java.util.Date;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import cn.itcast.ssm.controller.validation.ValidGroup1;
public class Items {
private Integer id;
//商品名称的长度请限制在1到30个字符
@Size(min=1,max=30,message="{items.name.length.error}")
private String name;
private Float price;
private String pic;
//请输入商品生产日期
//通过groups指定此校验属于哪个分组,可以指定多个分组
@NotNull(message="{items.createtime.is.notnull}",groups={ValidGroup1.class})
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();
}
}
2.配置校验注册添加到springmvc.xml中
<!-- 校验器 -->
<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:CustomValidationMessages</value>
</list>
</property>
<!-- 资源文件编码格式 -->
<property name="fileEncodings" value="utf-8" />
<!-- 对资源文件内容缓存时间,单位秒 -->
<property name="cacheSeconds" value="120" />
</bean>
3.在controller捕获校验信息并显示
@RequestMapping("/editItemSubmit")
// public String editItemSubmit(Integer id,ItemsCustom itemsCustom,
// ItemsQueryVo itemsQueryVo)throws Exception{
public String editItemSubmit(Model model,Integer id,
@Validated(value={ValidGroup1.class}) @ModelAttribute(value="itemsCustom") ItemsCustom itemsCustom,
BindingResult bindingResult,
//上传图片
MultipartFile pictureFile
)throws Exception{
//输出校验错误信息
//如果参数绑定时有错
if(bindingResult.hasErrors()){
//获取错误
List<ObjectError> errors = bindingResult.getAllErrors();
//准备在页面输出errors,页面使用jstl遍历
model.addAttribute("errors", errors);
for(ObjectError error:errors){
//输出错误信息
System.out.println(error.getDefaultMessage());
}
//如果校验错误,回到商品修改页面
return "editItem";
}
//进行数据回显
model.addAttribute("id", id);
//model.addAttribute("item", itemsCustom);
//进行图片上传
if(pictureFile!=null && pictureFile.getOriginalFilename()!=null && pictureFile.getOriginalFilename().length()>0){
//图片上传成功后,将图片的地址写到数据库
String filePath = "F:\\develop\\upload\\temp\\";
//上传文件原始名称
String originalFilename = pictureFile.getOriginalFilename();
//新的图片名称
String newFileName = UUID.randomUUID() +originalFilename.substring(originalFilename.lastIndexOf("."));
//新文件
File file = new java.io.File(filePath+newFileName);
//将内存中的文件写入磁盘
pictureFile.transferTo(file);
//图片上传成功,将新图片地址写入数据库
itemsCustom.setPic(newFileName);
}
//调用service接口更新商品信息
itemsService.updateItems(id, itemsCustom);
//提交后回到修改页面
//return "editItem";
//请求重定向
return "redirect:queryItems.action";
//转发
// return "forward:queryItems.action";
}
4.编写校验分组,只许定义一个接口即可
public interface ValidGroup1 {
//接口不定义方法,就是只标识 哪些校验 规则属于该 ValidGroup1分组
}
5.Hibernate的校验框架validation所需要的jar包
hibernate-validate-4.3.0.Final.jar
jboss-logging-3.1.0.CR2.jar
validation-api-1.0.0.GA.jar
6.定义错误信息CustomValidationMessages
#校验提示信息,items.name.length.error要写在java代码中
items.name.length.error=商品名称的长度请限制在1到30个字符
items.createtime.is.notnull=请输入商品生产日期