⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 validatormanager.java.svn-base

📁 EasyJWeb是基于java技术
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
						.getValue();
				if (vds.size() > 0) {
					for (int i = 0; i < vds.size(); i++) {
						if (validateObject == null)
							validateObject = this.addValidateObject(vds.get(i),
									property);
						else
							updateValidateObject(validateObject, vds.get(i));
					}
					Object key = en.getKey();
					if (key instanceof Field) {
						Field f = (Field) key;
						if (!StringUtils.hasLength(validateObject
								.getDisplayName()))
							validateObject.setDisplayName(f.name());
						if (validateObject.getKey() == null)
							validateObject.setKey(f.key());
						if (!StringUtils.hasLength(validateObject
								.getFieldName()))
							validateObject.setFieldName(f.fieldName());
					} else if (key instanceof FormPO) {
						if (validateObject.getFieldName() == null
								|| validateObject.getFieldName().indexOf(',') > 0)
							validateObject.setFieldName(property.getName());
					}
					if (!StringUtils.hasLength(validateObject.getFieldName()))
						validateObject.setFieldName(property.getName());
				}
			}
		}
		if (validateObject != null && validateObject.getFieldName() == null)
			validateObject.setFieldName(property.getName());
		return validateObject;
	}

	/**
	 * 通过Validator,Field及FormPO标签中的validators标签中的标签来判断验证对象配置。该方法将返回一个结构奇怪的数据结构,也即List<Map<Annonation,List<Validator>>>。即把针对字段的Field、Validator标签;针对方法的Field、Validator标签以;针对AFormPO的标签等分别放在存放在返回列表中。
	 * 
	 * @param property
	 *            属性名称
	 * @return List<Map<Annonation,List<Validator>>>
	 */
	private java.util.List findValidators1(
			java.beans.PropertyDescriptor property) {
		java.util.List ret = new java.util.ArrayList();

		java.lang.reflect.Method method = property.getWriteMethod();// 只有setter才需要进入验证
		if (method != null) {

			// 首先查询property对应的Field属性中的Field配置
			try {
				java.lang.reflect.Field f = method.getDeclaringClass()
						.getDeclaredField(property.getName());
				java.util.List<com.easyjf.container.annonation.Validator> vds = new java.util.ArrayList<com.easyjf.container.annonation.Validator>();
				java.util.Map<Object, List<com.easyjf.container.annonation.Validator>> map = new java.util.HashMap<Object, List<com.easyjf.container.annonation.Validator>>();
				// 首先通过Validator标签来判断验证对象
				com.easyjf.container.annonation.Validator vc = method
						.getAnnotation(com.easyjf.container.annonation.Validator.class);
				if (vc != null) {
					vds.add(vc);
				}
				Field field = f.getAnnotation(Field.class);
				if (field != null)
					vds.addAll(findValidators(field));
				map.put(field, vds);
				ret.add(map);
			} catch (Exception e) {
				// 没找到在field上的验证标签定义
			}
			{
				java.util.List<com.easyjf.container.annonation.Validator> vds = new java.util.ArrayList<com.easyjf.container.annonation.Validator>();
				java.util.Map<Object, List<com.easyjf.container.annonation.Validator>> map = new java.util.HashMap<Object, List<com.easyjf.container.annonation.Validator>>();

				// 首先通过Validator标签来判断验证对象
				com.easyjf.container.annonation.Validator vc = method
						.getAnnotation(com.easyjf.container.annonation.Validator.class);
				// TargetObject validateObject = null;
				if (vc != null) {
					vds.add(vc);
				}
				/**
				 * 通过Field标签中的validator及validators来判断验证对象配置
				 */
				Field field = method.getAnnotation(Field.class);
				if (field != null)
					vds.addAll(findValidators(field));

				map.put(field, vds);
				ret.add(map);

			}
			// 通过FormPO中的validators属性来检测配置对象
			java.util.List<com.easyjf.container.annonation.Validator> vds = new java.util.ArrayList<com.easyjf.container.annonation.Validator>();
			java.util.Map<Object, List<com.easyjf.container.annonation.Validator>> map = new java.util.HashMap<Object, List<com.easyjf.container.annonation.Validator>>();

			Class clz= method.getDeclaringClass();
			FormPO tempPO=null;
			while(clz.getSuperclass()!=Object.class){
			FormPO po =(FormPO)clz.getAnnotation(FormPO.class);
			if(po!=null && tempPO==null)tempPO=po;
			if (po != null && po.validators() != null) {
				vds.addAll(findValidators(po, property.getName()));
			}			
			clz=clz.getSuperclass();			
			}
			if(tempPO!=null)
			map.put(tempPO, vds);
			ret.add(map);
		}
		return ret;
	}

	/**
	 * 根据属性查询验证器列表
	 * 
	 * @param property
	 *            属性名称
	 * @return 查询结果
	 */
	public java.util.List<com.easyjf.container.annonation.Validator> findValidators(
			java.beans.PropertyDescriptor property) {
		java.util.List<com.easyjf.container.annonation.Validator> vds = new java.util.ArrayList<com.easyjf.container.annonation.Validator>();
		java.util.List ret = findValidators1(property);
		java.util.Iterator it = ret.iterator();
		while (it.hasNext()) {
			Map map = (Map) it.next();
			java.util.Iterator vsi = map.entrySet().iterator();
			while (vsi.hasNext()) {
				Map.Entry en = (Map.Entry) vsi.next();
				vds.addAll((List) en.getValue());
			}
		}

		return vds;
	}

	/**
	 * 解析Field这个标签,返回验证器对象
	 * 
	 * @param field
	 * @return 查询结果
	 */
	protected java.util.List<com.easyjf.container.annonation.Validator> findValidators(
			Field field) {
		java.util.List<com.easyjf.container.annonation.Validator> vds = new java.util.ArrayList<com.easyjf.container.annonation.Validator>();
		if (field != null) {
			if (!"NULL".equalsIgnoreCase(field.validator().name())) {
				com.easyjf.container.annonation.Validator vconfig = field
						.validator();
				vds.add(vconfig);

			}
			if (field.validators() != null) {
				for (int i = 0; i < field.validators().length; i++) {
					com.easyjf.container.annonation.Validator vtor = field
							.validators()[i];
					vds.add(vtor);
				}
			}
		}
		return vds;
	}

	/**
	 * 从标签FormPO中,返回
	 * 
	 * @param formPo
	 * @param name
	 * @return 查询结果
	 */
	public java.util.List<com.easyjf.container.annonation.Validator> findValidators(
			FormPO formPo, String name) {
		java.util.List<com.easyjf.container.annonation.Validator> vds = new java.util.ArrayList<com.easyjf.container.annonation.Validator>();
		if (formPo != null && formPo.validators() != null) {
			for (int i = 0; i < formPo.validators().length; i++) {
				String fs = formPo.validators()[i].field();
				fs = fs + ",";
				if (fs.toLowerCase().indexOf(name.toLowerCase() + ",") >= 0)
					vds.add(formPo.validators()[i]);
			}
		}
		return vds;

	}

	/**
	 * 更新验证目标对象中的内容
	 * 
	 * @param targetObject
	 * @param vc
	 */
	private void updateValidateObject(TargetObject targetObject,
			com.easyjf.container.annonation.Validator vc) {
		targetObject.setType(vc.type());
		if (!"".equals(vc.msg()))
			targetObject.setDefaultMessage(vc.msg());
		if (!"".equals(vc.displayName()))
			targetObject.setDisplayName(vc.displayName());
		if (!"".equals(vc.field()))
			targetObject.setFieldName(vc.field());
		if (!"".equals(vc.key()))
			targetObject.setKey(vc.key());
		if (vc.required())
			targetObject.setRequried(vc.required());
		if (!"".equals(vc.value()))
			targetObject.setValues(vc.value());
		Validator vtor = this.getValidator(vc.name());
		targetObject.addValidator(vtor);
	}

	/**
	 * 根据验证对象配置信息创建验证对象
	 * 
	 * @param vc
	 *            基于annotations的配置信息
	 * @param target
	 *            属性所属的目标对象
	 * @return 新创建或者已经存在的验证TargetObject
	 */
	private TargetObject createValidateObject(
			com.easyjf.container.annonation.Validator vc, Object target) {
		TargetObject obj = new TargetObject(this);
		obj.setTarget(target);
		this.updateValidateObject(obj, vc);
		return obj;
	}

	/**
	 * 往错误结果集中加入自定义的错误
	 * 
	 * @param name
	 * @param msg
	 * @param type
	 */
	public void addCustomError(String name, String msg, ValidateType type) {
		TargetObject tempTarget = new TargetObject();
		tempTarget.setDefaultMessage(msg);
		tempTarget.setFieldName(name);
		tempTarget.setDisplayName(name);
		tempTarget.setType(type);
		ValidateResult vr = new ValidateResult(tempTarget);
		this.getErrors().addError(vr);

	}

	/**
	 * 根据验证对象配置信息把验证对象添加到缓存中,并返回该对象,以供调用者使用
	 * 
	 * @param vc
	 *            基于annotations的验证对象配置信息
	 * @param target
	 *            验证对象所属的目标对象
	 * @return 具体的验证对象
	 */
	private TargetObject addValidateObject(
			com.easyjf.container.annonation.Validator vc, Object target) {
		TargetObject obj = createValidateObject(vc, target);
		this.addValidateObject(obj);
		return obj;
	}

	public Class findTargetType(String name) {
		return targetTypes.get(name);
	}

	public void addTargetType(String name, Class clz) {
		if (targetTypes.containsKey(name))
			logger.warn("覆盖名为" + name + "的验证类!");
		targetTypes.put(name, clz);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -