読者です 読者をやめる 読者になる 読者になる

slim3の入力チェック

AbstractValidatorを継承したクラスを常に作りまくらないといけない(?)のはつらいので
下記のようなメソッドをJDOControllerを継承した自作abstractなActionControllerクラスに追加した。

    public static Errors getErrors(){
        Errors e = (Errors)RequestLocator.get().getAttribute(ControllerConstants.ERRORS_KEY);
        if (e != null){
            return e;
        }
        return new Errors();
    }
    protected void addErrors(String key, String errorMsg){
        Errors errors = getErrors();
        errors.put(key, errorMsg);
        requestScope(ControllerConstants.ERRORS_KEY, errors);
    }

 
ActionControllerクラスを継承していればDBアクセスが必要な入力チェックに対して下記のようにエラーメッセージを埋め込めるようにした。

        if (UserDao.findByMail(user.getEmail()) != null){
            addErrors("nonUniqueError", "既にご登録されているメールアドレスです。");
            return forward("index");
        }

jsp側ではtaglibは嫌い(不慣れ)なのでApplicationHelperクラスを作成しpublic static な便利メソッドを用意した。

public static String errorWrite(){
    StringBuilder html = new StringBuilder();
    for (Entry<String, String> e : getErrors().entrySet()) {
          if (html.length() != 0){
              html.append("<br />");
          }
          html.append("・" + e.getValue());
    }
    return html.toString();
}

既に便利メソッドが用意されていたのかはわからない。とりあえず今はこうしてます。
本来の使い方と今後追加される予定の機能があれば知りたいところです。
サンプルプログラムからは見落としがちだが絶対に実用で必要な機能なので充実してほしいところです。