struts2自成定义校验器的使用

很多人在学习struts2的自定义校验器的时候总是走不通,我自己也有过这样的痛苦,网上百度了很多,但是还是没有找到合适的资料帮助自己(因为我是小白)我在这里自己总结一下,下面是struts2内建校验器(就是有点印象,不用详细看)位于xwork-2.0.4.jar压缩包中( com.opensymphony.xwork2.validator.validators)有个文件default.xml ,该文件中定义了Struts2框架内建的校验器。default.xml文件定义了常用的校验器类型。


 
<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
上面内建校验器其实想说明两点,第一点,校验器其实也就是java类,第二点,注册校验器的validator标签里面有一个name属性,还有一个class属性,其中name是给标签起个名字,class是哪个校验器java类。现在你有点头绪了吧。那下面是真正写一个自定义校验器类,

第一步,写一个校验器类,要实现自定义校验器,需要要继承FieldValidatorSupport这个类

package com.action;

import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;

public class MyValidator extends FieldValidatorSupport{

	private String str;
	@Override
	public void validate(Object obj) throws ValidationException {
		String userName = super.getFieldName();
		String value = super.getFieldValue(userName, obj).toString();
		if(!str.equals(value)){
			super.addFieldError(super.getFieldName(), obj);
		}
	}
	public String getStr() {
		return str;
	}
	public void setStr(String str) {
		this.str = str;
	}
}
第二步在项目根目录下(src)建立validators.xml文件,我不知道这个命名是不是一定要这个命名(不知道是否为规范,我也没深究,不过大部分人都这样命名,你可以自行把命名文件改了看能否走得通,但我个经历如果你把这validators.xml改了名字后在重新部署项目的时候会报错,报什么错,我估计你在走通后改了文件的命名,你自己在控制台看报错信息也能看得懂的)validators.xml的文件内容如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator Config 1.0//EN"
        "http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">
<!-- 注册给框架 -->
<validators>
	<validator name="test" class="com.action.MyValidator"></validator>
</validators>
还记得我在文章开头粘贴sturts2内建的效验器的写法吗?同样的结构,有 name属性, class属性,其中这个name属性里面的值你可以自己定义,类似一个id的值用来作标识使用。

上述两步已经建立好了自定义校验器,怎么去使用呢,下面就是使用


下面是一个jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>自定义校验器</title>
  </head>
  
  <body>
   <h4>添加联系人</h4>
   <s:form action="myValidatorAction" method="post">
   	<s:textfield label="联系人姓名" name="userName"></s:textfield>
   	<s:textfield label="联系人电话" name="userTelephone"></s:textfield>
   	<s:textfield label="联系人地址" name="userAddress"></s:textfield>
   	<s:submit value="提交"></s:submit>
   </s:form>
  </body>
</html>

建立一个action类

package com.action;

import com.opensymphony.xwork2.ActionSupport;

public class MyValidatorAction extends ActionSupport{
	private String userName;
	private String userTelephone;
	private String userAddress;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserTelephone() {
		return userTelephone;
	}
	public void setUserTelephone(String userTelephone) {
		this.userTelephone = userTelephone;
	}
	public String getUserAddress() {
		return userAddress;
	}
	public void setUserAddress(String userAddress) {
		this.userAddress = userAddress;
	}
	public String execute(){
		return SUCCESS;
	}
}

在与Action类同一个层级下建立Action类名-validation.xml文件,这个命名是有规范的,-前面的是你写的Action类名,后面写validation,这个是规定 的,从上面的那个action类

,就知道 我所写的xml 为MyValidatorAction-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="userName">
		<field-validator type="test">
			<param name="str">admin</param>
			<message>联系人必须为admin</message>
		</field-validator>
	</field>
</validators>        

上面校验器是校验如果前端标签里面name属性为userName的值不等于校验器类中 str属性值 admin时就会弹出提示信息“联系人必须为admin”


最后肯定要配置sturts.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.i18n.encoding" value="utf-8"></constant>
	<package name="default" extends="struts-default">
		<action name="myValidatorAction" class="com.action.MyValidatorAction">
			<result name="input">/myValidator.jsp</result>
			<result name="success">/myValidator.jsp</result>
		</action>
	</package>
</struts>
下面是我的src下目录 结构

部署好项目就可以运行起来了。

提交前


点击“提交”后



有什么问题可以留言,尽量解答,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值