Playframework 2.x のエラーハンドリングTips


フォームの相関チェックを行う

Playframework公式ドキュメントで紹介されているValidation Methodを利用します。例えば、Sign-up form内で、パスワードと確認用パスワードが一致するかはこのようにして確認できます。

public Map<String, List<ValidationError>> validate() {
    Map<String, List<ValidationError>> errors = null;
    if (!pwd.equals(confPwd)) {
        errors = new HashMap<String, List<ValidationError>>();
        List<ValidationError> lists = new ArrayList<ValidationError>();
        lists.add(new ValidationError("pwd", "error.pwdunmatched", new ArrayList<Object>()));
        errors.put("pwd", list);
    }
    return errors;
}

個々のエラーメッセージを出力する

Annotationで行っている単項目や上記で紹介した方法で詰まれたエラーは以下の様に取得できます。

for(Entry<String, List<ValidationError>> entry : form.errors().entrySet()){
    for(ValidationError validationError : entry.getValue()){
        for(Object argument : validationError.arguments()){
            System.out.println(validationError.argument, validationError.key, argument)
        }
    }
}

しかし、Controller側でエラーメッセージ取得することもないので、以下のような方法のでViewに出力方が良いかもしれませんね。

@(form: Form[_])
@import tags._
@if(form.hasErrors) {
    @for(entry <- form.errors.entrySet){
        @for(validationError <- entry.getValue){
            @for(argument <- valicationError.arguments){
                @Messages(validationError.message, Messages(validationError.key), Messages(argument))<br />
            }
        }
    }        
}