Beispiel #1
0
  public static Validation checkValidate(
      List<ValidatorConfigBean> valList, Map<String, String[]> paramMap, HttpServletRequest req) {

    Validation validation = new Validation();

    if (valList == null || valList.isEmpty()) return validation;

    // 启动验证器
    for (int i = valList.size() - 1; i > -1; i--) {
      ValidatorConfigBean val = valList.get(i);
      ValidatorIF validator = null;
      if (!"".equals(val.getName())) {
        // 根据name属性实例化相关的验证器,如果找不到,就根据class属性实例化
        validator = ValidatorFactory.getValidator(val.getName());
        if (validator == null)
          try {
            validator = (ValidatorIF) Class.forName(val.getClazz()).newInstance();
          } catch (Exception e) {
            log.error(StringUtil.getExceptionString(e));
          }
      }

      if (validator == null) continue;

      Map<String, Map<String, String>> err = validator.validate(val, paramMap, req).getErrors();
      for (Entry<String, Map<String, String>> en : err.entrySet()) {
        String key = en.getKey();
        Map<String, String> value = en.getValue();
        if (validation.getErrors().containsKey(key)) validation.getErrors().get(key).putAll(value);
        else validation.getErrors().put(key, value);
      }
    }

    return validation;
  }
  public Validation validate(ValidatorConfigBean val, Context context) {
    Map<String, String> errMap = new HashMap<String, String>();

    for (FieldConfigBean fcb : val.getField()) {
      // 比如我现在验证 "name"参数值不能出现 "中国" 字眼
      String key = fcb.getName();
      String value = context.getQueryParamMap().get(key)[0]; // 这个是封装了request请求传过来的参数map
      if (value.indexOf("中国") != -1) errMap.put(key, fcb.getMessage());
    }

    Validation validation = new Validation();
    validation.getErrors().put(val.getName(), errMap);

    return validation;
  }