本节使用一个应用 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"%>
<!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>添加商品</title>
</head>
<body>
<form:form modelAttribute="goods"
action="${pageContext.request. contextPath }/goods/save" method="post">
<fieldset>
<legend> 添加一件商品 </legend>
<P>
<label>商品名:</label>
<form:input path="gname" />
</p>
<p>
<label>商品详情:</label>
<form:input path="gdescription" />
</p>
<P>
<label>商品价格:</label>
<form:input path="gprice" />
</p>
<P>
<label>创建日期:</label>
<form:input path="gdate" />
(yyyy-MM-dd)
</p>
<p id="buttons">
<input id="reset" type="reset">
<input id="submit" type="submit" value="添加">
</p>
</fieldset>
<!-- 取出所有验证错误 -->
<form:errors path="*" />
</form:form>
</body>
</html>
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