您的位置:首页 > 编程语言 > Java开发

struts2自成定义校验器的使用

2016-06-19 14:50 447 查看
很多人在学习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下目录 结构

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

提交前



点击“提交”后



有什么问题可以留言,尽量解答,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts2.0