Struts2之验证器入门

本文介绍了Struts2验证器的几种类型及其应用场景,并通过一个简单的注册表单验证实例展示了如何配置验证规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 首先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:指定字段日期值的最大值,该参数为可选

email

邮件地址校验器,要求被检查的字段如果非空,则必须是合法的邮件地址。

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验证器有了初步的认识呢?

这是我写的第一遍博客,希望能帮助到大家。

如果你喜欢我的博客记得点赞哦!亦或者这篇博客哪里写得不好请在下方评论。大笑


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值