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