spring mvc验证器应用实例(超详细)-亚博电竞手机版

本节使用一个应用 springmvcdemo08 讲解 spring 验证器的编写及使用。该应用中有一个数据输入页面 addgoods.jsp,效果如图 1 所示。 图 1数据输入页面 有一个数据显示页面 goodslist.jsp,效果如图 2 所示。 图 2数据显示页面 编写一个实现 org.springframework.validation.validator 接口的验证器类 goodsvalidator,验证要求如下:
  • 商品名和商品详情不能为空。
  • 商品价格在 0 到 100。
  • 创建日期不能在系统日期之后。
根据上述要求,按照如下步骤完成 springmvcdemo08 应用。

1)创建应用

创建 springmvcdemo08 应用,并导入 spring mvc 的相关 jar 包。另外,需要使用 jstl 标签显示数据,所以需要导入 jstl 的 jar 包。springmvcdemo08 需要的 jar 包和《spring mvc数据绑定和表单标签》教程中 springmvcdemo04 应用相同,在这里不在赘述。

2)创建数据输入页面

在 web-inf 目录下创建文件夹 jsp,并在该文件夹中创建数据输入页面 addgoods.jsp。代码如下:
 <%@ page language="java" contenttype="text/html; charset=utf-8"     pageencoding="utf-8"%> <%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>     添加商品                
添加一件商品

(yyyy-mm-dd)

3)编写模型类

在 src 目录下创建 pojo 包,并在该包中定义领域模型类 goods,封装输入参数。在该类中使用 @datetimeformat(pattern="yyyy-mm-dd")格式化创建日期。 模型类 goods 的具体代码如下:
 package pojo;  import java.util.date;  import org.springframework.format.annotation.datetimeformat;  public class goods {     private string gname;     private string gdescription;     private double gprice;     // 日期格式化(需要在配置文件中配置formattingconversionservicefactorybean)     @datetimeformat(pattern = "yyyy-mm-dd")     private date gdate;      public string getgname() {         return gname;     }      public void setgname(string gname) {         this.gname = gname;     }      public string getgdescription() {         return gdescription;     }      public void setgdescription(string gdescription) {         this.gdescription = gdescription;     }      public double getgprice() {         return gprice;     }      public void setgprice(double gprice) {         this.gprice = gprice;     }      public date getgdate() {         return gdate;     }      public void setgdate(date gdate) {         this.gdate = gdate;     } }

4)编写验证器类

在 src 目录下创建 validator 包,并在该包中编写实现 org.springframework.validation.validator 接口的验证器类 goodsvalidator,使用 @component 注解将 goodsvalidator 类声明为验证组件。具体代码如下:
 package validator;  import java.util.date; import org.springframework.stereotype.component; import org.springframework.validation.errors; import org.springframework.validation.validationutils; import org.springframework.validation.validator; import pojo.goods;  @component public class goodsvalidator implements validator {     @override     public boolean supports(class klass) {         // 要验证的model,返回值为false则不验证         return goods.class.isassignablefrom(klass);     }      @override     public void validate(object object, errors errors) {         goods goods = (goods) object; // object要验证的对象         // goods.gname.required是错误消息属性文件中的编码(国际化后对应的是国际化的信息)         validationutils.rejectifempty(errors, "gname", "goods. gname.required");         validationutils.rejectifempty(errors, "gdescription",                 "goods.gdescription.required");         if (goods.getgprice() > 100 || goods.getgprice() < 0) {             errors.rejectvalue("gprice", "gprice.invalid");         }         date goodsdate = goods.getgdate();         // 在系统时间之后         if (goodsdate != null && goodsdate.after(new date())) {             errors.rejectvalue("gdate", "gdate.invalid");         }     } }

5)编写错误消息属性文件

在 web-inf 目录下创建文件夹 resource,并在该文件夹中编写属性文件 errormessages.properties。文件内容如下:

goods.gname.required=请输入商品名称 goods.gdescription.required=请输入商品详情 gprice.invalid=价格为0~100 gdate.invalid=创建日期不能在系统日期之后

unicode 编码(myeclipse 带有将汉字转换成 unicode 编码的功能)的属性文件内容如下:

goods.gname.required=\u8bf7\u8f93\u5165\u5546\u54c1\u540d\u79f0 goods.gdescription.required=\u8bf7\u8f93\u5165\u5546\u54c1\u8be6\u60c5 gprice.invalid=\u4ef7\u683c\u4e3a0~100 gdate.invalid=\u521b\u5efa\u65e5\u671f\u4e0d\u80fd\u5728\u7cfb\u7edf\u65e5\u671f\u4e4b\u540e

在属性文件创建完成后需要告诉 spring mvc 从该文件中获取错误消息,则需要在配置文件中声明一个 messagesource bean,具体代码如下:
        

6)编写 service 层

在 src 目录下创建 service 包,并在该包中编写一个 goodsservice 接口。具体代码如下:
 package service; import java.util.arraylist; import pojo.goods; public interface goodsservice {     public boolean save(goods g);      public arraylist getgoods(); }
goodsserviceimpl 实现类具体代码如下:
 package service;  import java.util.arraylist; import org.springframework.stereotype.service; import pojo.goods;  @service public class goodsserviceimpl implements goodsservice {     // 使用静态集合变量goods模拟数据库     private static arraylist goods = new arraylist();      @override     public boolean save(goods g) {         goods.add(g);         return true;     }      @override     public arraylist getgoods() {         return goods;     } }

7)编写控制器类

在 src 目录下创建 controller 包,并在该包中编写控制器类 goodscontroller,在该类中使用 @resource 注解注入自定义验证器。另外,在控制器类中包含两个处理请求的方法,具体代码如下:
 package controller;  import javax.annotation.resource; import org.apache.commons.logging.log; import org.apache.commons.logging.logfactory; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.controller; import org.springframework.ui.model; import org.springframework.validation.bindingresult; import org.springframework.validation.validator; import org.springframework.web.bind.annotation.modelattribute; import org.springframework.web.bind.annotation.requestmapping; import pojo.goods; import service.goodsservice;  @controller @requestmapping("/goods") public class goodscontroller {     // 得到一个用来记录日志的对象,这样在打印信息的时候能够标记打印的是哪个类的信息     private static final log logger = logfactory.getlog(goodscontroller.class);      @autowired     private goodsservice goodsservice;     // 注解验证器相当于"goodsvalidator validator=new goodsvalidator () ; "     @resource     private validator validator;      @requestmapping("/input")     public string input(model model) {         // 如果model中没有goods属性,addgoods.jsp会抛出异常         // 因为表单标签无法找到modelattribute属性指定的form backing object         model.addattribute("goods", new goods());         return "addgoods";     }      @requestmapping("/save")     public string save(@modelattribute goods goods, bindingresult result,             model model) {         this.validator.validate(goods, result); // 添加验证         if (result.haserrors()) {             return "addgoods";         }          goodsservice.save(goods);         logger.info("添加成功");         model.addattribute("goodslist", goodsservice.getgoods());         return "goodslist";     } }

8)编写配置文件

在 web-inf 目录下编写配置文件 springmvc-servlet.xml,具体代码如下:
                                                                                               

9)创建数据显示页面

在 web-inf/jsp 目录下创建数据显示页面 goodslist.jsp。核心代码如下:
 <%@ page language="java" contenttype="text/html; charset=utf-8"     pageencoding="utf-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>     insert title here                    
商品名 商品详情 商品价格 创建日期
${goods.gname } ${goods.gdescription } ${goods.gprice } ${goods.gdate }

10)创建 web.xml 文件

在 web-inf 目录下创建 web.xml 文件,在该文件中配置 spring mvc 的核心控制器 dispatcherservlet 和字符编码过滤器,具体代码如下:
                     springmvc         org.springframework.web.servlet.dispatcherservlet     1                   springmvc         /                        encodingfilter                       org.springframework.web.filter.characterencodingfilter                       encoding         utf-8                   forceencoding         true                        encodingfilter         /*      

11)测试应用

发布 springmvcdemo08 应用并启动 tomcat 服务器,然后通过地址“http://localhost:8080/springmvcdemo08/goods/input”测试应用。 当输入价格大于 100 元时,下面会提示“价格为0~100”的信息,如图 3 所示。 图 3错误提示页面
展开全文
内容来源于互联网和用户投稿,文章中一旦含有亚博电竞手机版的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系亚博电竞手机版删除

最新文章

网站地图