WicketでValidatorを作成する方法

otaguro 408views 更新:2014年9月18日

WicketでPasswordTextField passwordにValidatorを設定するには、次のようにしますが、

 //ASCIIコードのみ入力可
 password.add(new PatternValidator("[\\u0020-\\u007E]+"))

少し複雑な値の検証を行うには、Validatorを新しく作る必要があります。
例えば、Shift_JISの1Byte文字だけを可にするには、

  public class PasswordValidator implements IValidator {

    PasswordValidator() {
    }

    @Override
    public void validate(IValidatable validatable) {

      final String password = validatable.getValue();

      // validate password
      if (!checkPassword(password)) {

        // Message from key "StrongPasswordValidator.not-strong-password"
        error(validatable, "not-strong-password");
      }

    }

    private void error(IValidatable validatable, String errorKey) {
      ValidationError error = new ValidationError();
      error.addMessageKey("パスワードは半角英数字または半角記号で入力してください。");
      validatable.error(error);
    }

    private boolean checkPassword(String value) {
      int length = value.length();
      for (int i1 = 0; i1 < length; i1++) {
        if (!is1Byte(value.charAt(i1))) {
          // 1Byte文字以外を含んでいる
          return false;
        }
      }
      return true;
    }

    /**
     * 1Byte文字かどうかを返します
     *
     * @param ch
     * @return
     */
    private boolean is1Byte(char ch) {

      byte[] chars;

      try {
        chars = (Character.valueOf(ch).toString()).getBytes("shift_jis");
      } catch (UnsupportedEncodingException ex) {
        return false;
      }

      if (chars.length == 2) {
        // 全角文字
        return false;
      }
      return true;

    }

  }

のようにします。
詳しくはこちら http://www.mkyong.com/wicket/create-custom-validator-in-wicket/
http://wicket.apache.org/guide/guide/forms2.html
http://hondou.homedns.org/pukiwiki/pukiwiki.php?Wicket%20Validator%A4%F2%BA%EE%A4%EB

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません