代码之家  ›  专栏  ›  技术社区  ›  jeff

Java web应用程序数据输入验证方法位置

  •  0
  • jeff  · 技术社区  · 14 年前

    我应该在哪里找到验证员工ID(徽章)的代码,该代码将通过我的应用程序以多种html形式输入?

    但是现在,除了登录之外,我正在创建另一个用例,在这个用例中,主管通过输入员工的徽章来为员工分配任务(CommitmentItemForm.java)。我不希望复制我的业务逻辑(某一天一个有效的徽章可能有7个数字),所以我觉得我需要把它从stkusorform中移出。

    java—从登录页(通过servlet)调用,上面提到的两个方法都调用processBadge,然后调用validateBadge方法。

    public final class STKUserForm extends Form {
        public STKUser authenticateUser(STKUser LoginUser) {
            <snip> 
                processBadge(LoginUser.getBadge());
            <snip>
            return authenticatedUser;
        }
        public void requestPassword(STKUser loginUser) {
            <snip> 
                processBadge(LoginUser.getBadge());
            <snip>
        }
    
    public void processBadge(String badge) throws DAOException {
        try {
            validateBadge(badge);
        } catch (ValidatorException e) {
            setError(FIELD_USERBADGE, e.getMessage());
        }
    }
    
    public void validateBadge(String badge) throws ValidatorException, DAOException {
        if (badge != null) {
            if (!FormUtil.isBadge(badge)) {
                throw new ValidatorException("Please enter valid badge (6 digits, numbers only, and no 'E').");
            } else if (!STKUserDAO.isValidEmployee(badge)) {
                throw new ValidatorException("This is not a valid badge of any EB Employee.");
            }
        }
    }
    }
    

    2 回复  |  直到 14 年前
        1
  •  0
  •   BruteForce    14 年前

    我希望STKUserDAO.isValidEmployee()提供stkuPerform.validateEdge()方法的所有功能,而不是在STKUserDAO.isValidEmployee()中抛出异常。然后,在访问数据库的任何地方都可以进行验证。

        2
  •  0
  •   les2    14 年前

    public final class BadgeId {
       private final String value;
       public BadgeId(String value) {
          if(value not valid badge id) throw IllegalArgumentException("invalid: " + value);
          this.value = value;
       }
       public String getValue() {
          return value;
       }
       // equals and hashcode
    }
    

    现在您可以在所有方法中使用BadgeId而不是String。为了方便起见,操作窗体可以有一个getBadgeId():BadgeId方法。由于BadgeId是不可变的,并且构造函数强制有效性,所以您不必担心无效的BadgeId对象四处飞舞。

    BadgeId类的另一个有用方法可能是:

    public static BadgeId toBadgeId(String value) { ... }
    

    public abstract class BadgeId {
        ... same constructs / methods as before except ...
    
        protected abstract boolean isValid(String value);
    }
    
    public final class NumericBadgeId extends BadgeId {
        public NumericBadgeId(String value) {
            super(value);
        }
        protected boolean isValid(String value) {
            return true if value contains all numbers; false otherwise
        }
    }