自定义验证器
自定义一个18位身份证验证器I--编写验证器类
II--在validators.xml文件中进行注册
III--在验证配置文件中使用
I.定义一个验证器的类
>自定义的验证器都需要实现Validator接口
>若需要普通的验证程序,可以继承ValidatorSupport类
若需要字段验证程序,可以继承FieldValidatorSupport类
>具体实现参考目前已经有的验证器
>若验证程序需要接受一个输入参数,需要为这个参数增加一个相应的属性,如min,max等。
II.在配置文件中配置验证器
>默认情况下,Struts2会在类路径的根目录下加载validators.xml文件,在该文件加载验证器。该文件的定义方式同默认的验证器的配置文件(default.xml)
>若类路径下没有指定的验证器配置文件,则从default.xml中加载。
III.使用
和目前的验证器一样。
IV.示例代码:自定义一个18位身份证验证器(IDCard类只是随便写写)
编程验证
--Struts2提供了一个Validateable接口,可以使Action类实现这个接口以提供编程验证功能。
--ActionSupport类已经实现了Validateable接口
@Override
public void validate() {
if(idCard == null || idCard.trim().equals("")){
addFieldError("idCard",getText("idCard is null"));
}
}
范例:
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>
<package name="default" namespace="/" extends="struts-default">
<action name="testValidateion2" class="com.wul.app.TestValidationAction">
<result>/success.jsp</result>
<result name="input">/validation2.jsp</result>
</action>
</package>
</struts>
IDCard.java
package com.wul.app;
public class IDCard {
public boolean Verify(String idCard){
if(idCard.length()==18)
return true;
else
return false;
}
}
IDCardValidator.java
package com.wul.app;
import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;
public class IDCardValidator extends FieldValidatorSupport {
@Override
public void validate(Object object) throws ValidationException {
//1.获取字段的名字和值
String fieldName = getFieldName();
Object value = this.getFieldValue(fieldName, object);
//2.验证
IDCard idcard = new IDCard();
boolean result = idcard.Verify((String)value);
//3.若验证失败,则....
if(!result){
addFieldError(fieldName, object);
}
}
}
TestValidationAction.java
package com.wul.app;
import com.opensymphony.xwork2.ActionSupport;
public class TestValidationAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private String idCard;
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
@Override
public void validate() {
if(idCard == null || idCard.trim().equals("")){
addFieldError("idCard",getText("idCard is null"));
}
}
}
TestValidationAction-validation.xml
<!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="idCard">
<field-validator type="idcard">
<message>It is not a idCard</message>
</field-validator>
</field>
</validators>
validators.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Definition 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">
<!-- START SNIPPET: validators-default -->
<validators>
<validator name="idcard" class="com.wul.app.IDCardValidator"/>
</validators>
validation2.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!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>Insert title here</title>
</head>
<body>
<s:debug></s:debug>
<s:form action="testValidateion2" theme="simple">
idCard:<s:textfield name="idCard"></s:textfield>
<s:fielderror fieldName="idCard"></s:fielderror>
<s:submit></s:submit>
</s:form>
</body>
</html>
success.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!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>Insert title here</title>
</head>
<body>
success
</body>
</html>