11

まず第一に、2.0のPlayドキュメントは本当に本当に悪いと思うことを述べたいと思います。

自動生成された入力ボックスに対してplayが行うように、HTML選択の下に検証エラーを配置する方法を探しています。

Play入力ボックスの結果のHTMLコードの構造をコピーしようとしましたが、HTMLコードにifError-Scalaテンプレート行が欠落していると確信しています。

残念ながら、Play<2.0のドキュメントですでに取り上げられているトピックのPlay2.0のドキュメントを見つけることはできません。したがって、ドキュメントで解決策を探している場合は、機能していない古いドキュメントにたどり着きます。とてもイライラする!

4

2 に答える 2

17

このコードを使用して、フォームにグローバルブートストラップアラートボックスを表示します。

@if(form.hasErrors) {
    <div class="alert alert-error">
        <a class="close" data-dismiss="alert">x</a>
        @if(form.errors.size() > 0) {
            @for((key, value) <- form.errors) {
                @key.toString() : 
                    @for(err <- value) {
                        @err.message().toString()
                    }
            }
        } else {No error returned.}
    </div>
}

フォームエラーのキーと値のペアの出力は、が付いたブートストラップアラートボックス@key.toString() : @value.message.toStringです。

代わりにフィールドレベルでエラーを表示する場合は、form.errorsマップ値の別の条件ステートメントを使用してエラーをわずかに変更し、特定のフィールドに対してのみトリガーされるようにします。私はこれをテストしていませんが、次のようになります。

@if(form.hasErrors) {
    @if(form.errors.size() > 0) {
        @for((key, value) <- form.errors) {
            @for(err <- value) {
                @if(err.contains("YourSelectFieldName")) {
                    @err.message().toString()
                }
            }
        }
    }
}
于 2013-01-13T14:21:57.943 に答える
1

2manyprojectsからの回答は非常にうまく機能しますが、コントローラーでも同じことができます。それはすべてあなたの好みとスタイルに依存します。

public static Result save() {
        Form<form> boundForm = form.bindFromRequest();
        if (boundForm.hasErrors()) {
            String errorMsg = "";
            java.util.Map<String, List<play.data.validation.ValidationError>> errorsAll = boundForm.errors();
            for (String field : errorsAll.keySet()) {
                errorMsg += field + " ";
                for (ValidationError error : errorsAll.get(field)) {
                    errorMsg += error.message() + ", ";
                }
            }
            flash("error", "Please correct the following errors: " + errorMsg);
            return badRequest(detail.render(boundForm));
        }
于 2014-05-24T21:57:15.030 に答える