📄 validatormap.java
字号:
package com.exp.web.util.validator;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.Vector;
import com.exp.fcl.xml.EXPXMLNode;
import com.exp.web.util.FormBean;
public class ValidatorMap {
protected static final Map validators = new HashMap();
static {
registerValidator("length", LengthValidator.class);
registerValidator("ulength", ULengthValidator.class);
registerValidator("range", RangeValidator.class);
registerValidator("digist", DigistValidator.class);
registerValidator("equal", EqualsValidator.class);
registerValidator("digiststring", DigistStringValidator.class);
registerValidator("email", EMailValidator.class);
registerValidator("hasdata", HasDataValidator.class);
registerValidator("regex", RegexValidator.class);
registerValidator("custom", CustomValidatorWrapper.class);
}
public static void registerValidator(String type, Class cls) {
validators.put(type.toLowerCase(), cls);
}
public static BaseValidator getValidator(String type) {
Class cls = (Class) validators.get(type.toLowerCase());
try {
return (BaseValidator) cls.newInstance();
} catch (Throwable thr) {
thr.printStackTrace();
}
return null;
}
public ValidatorMap(EXPXMLNode validators) {
int nCount = validators.getChildNodesCount();
for (int i = 0; i < nCount; i++) {
EXPXMLNode actionNode = validators.getChildNode(i);
String actionName = actionNode.getNodeName();
String formName = actionNode.getAttributeValue("form");
String lowerActionName = actionName.toLowerCase();
//设置验证集
this.actionValidators.put(lowerActionName, ValidatorMap
.getValidators(actionNode));
//设置前端校验脚本代码
this.frontChecks.put(lowerActionName, this.genJavaScript(formName,
lowerActionName));
}
}
/**
* 得到定义所有验证定义,针对每个事件
*
* @param parent
* @return
*/
static Vector getValidators(EXPXMLNode parent) {
EXPXMLNode validator = null;
Vector vect = new Vector();
int nSize = parent.getChildNodesCount();
for (int j = 0; j < nSize; j++) {
validator = parent.getChildNode(j);
String type = validator.getAttributeValue("type");
if (type.equalsIgnoreCase("ref")) {
RefValidator refValidator = new RefValidator();
refValidator.setValidatorNode(validator);
EXPXMLNode refNode = refValidator.getRefNode();
if (refNode != null) {
Vector vectRef = ValidatorMap.getValidators(refNode);
if (vectRef != null) {
vect.addAll(vectRef);
}
}
} else {
BaseValidator baseValidator = ValidatorMap.getValidator(type);
baseValidator.setValidatorNode(validator);
if (baseValidator != null) {
vect.add(baseValidator);
}
}
}
return vect;
}
private Hashtable actionValidators = new Hashtable();
private Hashtable frontChecks = new Hashtable();
/**
* 执行验证
*
* @param actionName
* 事件名称
* @param formBean
* 当前FormBean
* @return 错误消息,如果无错误消息,则为null
*/
public Vector checkValid(String actionName, FormBean formBean) {
Vector vect = getValidators(actionName);
if (vect != null) {
int nSize = vect.size();
BaseValidator validator = null;
if (nSize > 0) {
Vector messages = new Vector();
for (int i = 0; i < nSize; i++) {
validator = (BaseValidator) vect.get(i);
String target = validator.getTarget();
if (!target.equals("")) {
String temp = formBean.getString(target);
if (temp.equals("") && validator.isEmptyJump()) {
continue;
}
}
if (!validator.checkValid(formBean)) {
messages.add(validator.getMessage());
}
}
if (messages.size() > 0) {
return messages;
}
}
}
return null;
}
/**
* 得到针对某个事件的验证集合
*
* @param actionName
* 事件名称
* @return
*/
private Vector getValidators(String actionName) {
String realActionName = actionName;
if (actionName.equals("")) {
realActionName = "default";
}
Vector vect = (Vector) this.actionValidators.get(realActionName
.toLowerCase());
return vect;
}
/**
* 得到已定义的需要验证的action名称数组
*
* @return
*/
public String[] getValidatorActions() {
int nSize = this.actionValidators.size();
String[] rets = new String[nSize];
Enumeration enum = this.actionValidators.keys();
while (enum.hasMoreElements()) {
rets[nSize - 1] = (String) enum.nextElement();
nSize--;
}
return rets;
}
/**
* 得到针对某个事件的前端验证脚本
*
* @param actionName
* 事件名称
* @return 脚本代码,如果没有脚本,则返回空字符串
*/
public String getJavaScript(String actionName) {
String script = (String) this.frontChecks.get(actionName.toLowerCase());
if (script != null) {
return script;
} else {
return "";
}
}
/**
* 为某事件生成前端数据校验脚本
*
* @param formName
* 该事件所属的窗体名称
* @param actionName
* 事件名称
* @return 生成后的脚本代码
*/
private String genJavaScript(String formName, String actionName) {
if (formName != null && !formName.equals("")) {
Vector vect = this.getValidators(actionName);
if (vect == null) {
return "";
} else {
int nSize = vect.size();
StringBuffer buf = new StringBuffer();
for (int i = 0; i < nSize; i++) {
BaseValidator validator = (BaseValidator) vect.get(i);
validator.setFormName(formName);
String script = validator.getJavaScript();
if (script != null) {
buf.append(script);
buf.append("\n");
}
}
return buf.toString();
}
} else {
return "";
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -