首先Struts2的验证器非常强大,我现在刚入门所以就写下今天即2018.02.01我所理解的验证器吧。
我们先来看下Struts2验证器给我们定义了几种类型,请看下图:
这些类型是xwork-core-2.3.15.3.jar下的com.opensymphony.xwork2.validator.validators.default.xml定义的
然后,我们来看一下这些定义的类型:
校验器 | 作用 |
required | 必填校验器,要求字段必须有值 |
requiredstring | 必填字符串校验器,要求必须有值且长度大于0,即不能是空字符串。默认会去掉字符串前后空格 参数fieldName:该参数指定校验的字段名称,如果是字段校验,则不用指定该参数 参数trim:该参数为可选参数,用于指定是否在校验之前对字符串进行整理。 |
stringlength | 字符串长度校验器,用于检验字段中字符串长度是否在指定的范围 参数 maxLength:用于指定最大字符串长度,该参数为可选 参数 minLength:用于指定最小字符串长度,该参数为可选 |
int | 整数校验器,可以配置整数在指定的范围内 参数 min:指定字段值的最小值,该参数为可选 参数 max:指定字段值的最大值,该参数为可选 |
date | 日期校验器,可以配置日期在指定的范围内 参数 min:指定字段日期值的最小值,该参数为可选 参数 max:指定字段日期值的最大值,该参数为可选 |
邮件地址校验器,要求被检查的字段如果非空,则必须是合法的邮件地址。 | |
regex | 检查是否能匹配到正则表达式,参数为regex |
这是我从其他地方复制下来的,原文链接:点击打开链接
开始进入实践部分,我们来做一个小小的注册验证吧:
1.先定义一个ValidateAction类和一个pojo类User,我把它放在了action包下,代码如下:
import org.rickyleslie.pojo.User;
import com.opensymphony.xwork2.ActionSupport;
public class ValidateAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private User user;
//注册时的重复密码
private String rePassword;
public String getRePassword() {
return rePassword;
}
public void setRePassword(String rePassword) {
this.rePassword = rePassword;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String registAction() {
System.out.println("user: " + user + " rePassword: " + rePassword);
return SUCCESS;
}
}
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private String password;
private Character sex;
private String address;
private Integer age;
private Date birthday;
private String url;
private String email;
private String phone;
public User() {
// TODO Auto-generated constructor stub
}
public User(String username, String password, Character sex, String address, Integer age, Date birthday, String url,
String email, String phone) {
this.username = username;
this.password = password;
this.sex = sex;
this.address = address;
this.age = age;
this.birthday = birthday;
this.url = url;
this.email = email;
this.phone = phone;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Character getSex() {
return sex;
}
public void setSex(Character sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", sex=" + sex + ", address=" + address + ", age=" + age + ", birthday="+ birthday + ", url=" + url + ", email=" + email + ", phone=" + phone + "]";
}
}
2.然后创建一个ValidateAction-validation.xml文件:
注意:ValidateAction-validation.xml 文件必须放在和ValidateAction类同一个包下,即action包,而且xml的文件名
必须以ActionClassName-validation.xml方式来命名,ValidateAction类的xml文件名就命名为
ValidateAction-validation.xml。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="user.username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message><![CDATA[用户名不能为空]]></message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message><![CDATA[密码不能为空]]></message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="regex">
<param name="expression"><![CDATA[^[a-zA-z0-9]{6,12}$]]></param>
<message><![CDATA[密码必须在6-12位之内]]></message>
</field-validator>
</field>
<!-- 跟另一个parm进行比较 -->
<field name="user.password">
<field-validator type="fieldexpression">
<param name="expression">user.password==rePassword</param>
<message><![CDATA[两次密码输入不一致]]></message>
</field-validator>
</field>
<!-- 必填验证 -->
<field name="user.sex">
<field-validator type="required">
<message><![CDATA[性别不能为空]]></message>
</field-validator>
</field>
<field name="user.address">
<field-validator type="stringlength">
<param name="maxLength">30</param>
<param name="minLength">2</param>
<param name="trim">true</param>
<message><![CDATA[地址必须在2-30个字符之间]]></message>
</field-validator>
</field>
<field name="user.age">
<field-validator type="int">
<param name="max">150</param>
<param name="min">1</param>
<message><![CDATA[年龄必须在1-150之间]]></message>
</field-validator>
</field>
<field name="user.birthday">
<field-validator type="date">
<param name="max">2019-01-01</param>
<param name="min">2018-01-01</param>
<message>生日必须在${min}到${max}</message>
</field-validator>
</field>
<field name="user.url">
<field-validator type="url">
<message><![CDATA[url必须是一个网址]]></message>
</field-validator>
</field>
<field name="user.email">
<field-validator type="email">
<message><![CDATA[email必须是一个邮箱]]></message>
</field-validator>
</field>
</validators>
3.struts2的主配置文件struts.xml和实现请求跳转的struts-validation.xml
这是struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!--开发模式下启用,输出更加详细的日志 -->
<constant name="struts.devMode" value="true"></constant>
<!--设置浏览器是否开启缓存,一般开发环境下设为false 浏览器不缓存 -->
<constant name="struts.serve.static.browserCache" value="false"></constant>
<!-- 当struts的配置文件更改的时候,自动重新加载该文件,开发环境中是使用 -->
<constant name="struts.configuration.xml.reload" value="true"></constant>
<!-- 开启动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<!--struts默认的视图主题 -->
<constant name="struts.ui.theme" value="simple"></constant>
<!--提供给struts-default中的编码拦截器使用,默认utf-8编码 -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!--该属性指定struts处理的请求后缀,默认是action,即所有*.action会被struts处理,如果有多个,可以,隔开 -->
<constant name="struts.action.extension" value="action,do"></constant>
<!--上传文件大小限制 -->
<constant name="struts.multipart.maxSize" value="10701096"></constant>
<!-- 标签顺序要对,这里配置全局设置的 -->
<package name="basePackage" extends="struts-default">
</package>
<!-- 导入其他配置文件 -->
<include file="struts-validation.xml"></include>
</struts>
struts-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 通过extends属性来继承stuts.xml的package -->
<package name="validation" extends="basePackage" namespace="/validation">
<action name="registAction" class="org.rickyleslie.action.ValidateAction"
method="registAction">
<!--返回的字符串与结果相对应 name 不写默认是success-->
<result name="success">/input.jsp</result>
</action>
</package>
</struts>
4.注册界面 input.jsp
<%@ page language="Java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ path + "/";
%>
<!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>">
<title>标题</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<fieldset id="">
<legend>regist</legend>
<form action="validation/registAction.do" method="get">
<input type="text" name="user.username" placeholder="username:"/>
<input type="password" name="user.password"placeholder="password:"/>
<input type="password" name="rePassword"placeholder="rePassword:"/>
<br /> male:
<input type="radio" name="user.sex" value="m" /> female:
<input type="radio" name="user.sex" value="f" />
<br />
<input type="text" name="user.address" placeholder="address:" />
<input type="text" name="user.age" placeholder="age:" />
<br />
<input type="date" name="user.birthday" />
<input type="text" name="user.url" placeholder="url:" />
<br />
<input type="text" name="user.email" placeholder="email:" />
<input type="submit" value="submit" />
</form>
</fieldset>
<fieldset id=" ">
<legend>fielderror</legend>
<p>
错误信息如下:
<s:fielderror></s:fielderror>
</p>
</fieldset>
</body>
</html>
该写的都写了,那么现在就让我们 run 一下吧
浏览器输入:http://localhost:8080/struts-simple/input.jsp,这个是我自己项目部署URL,用来参考
struts2验证器得到以下的结果:
做到这里,你是否对struts2验证器有了初步的认识呢?
这是我写的第一遍博客,希望能帮助到大家。
如果你喜欢我的博客记得点赞哦!亦或者这篇博客哪里写得不好请在下方评论。