2013-01-12 13 views
10

まず、2.0のPlayドキュメントが本当に悪いと思います。Play Framework 2での表示エラー

私は、自動生成された入力ボックスのためにHTMLのようなプレーのような検証エラーを配置する方法を探しています。

再生入力ボックスのHTMLコードの構造をコピーしようとしましたが、HTMLコードにifError-Scalaのテンプレート行がいくつか欠落しています。

Play < 2.0のドキュメントで既にカバーされているトピックについては、Play 2.0のドキュメントを見つけることができません。したがって、ドキュメント内の解決策を探している場合は、古いドキュメント、作業ドキュメント、ドキュメンテーションに上陸します。非常にイライラする!

+0

最新のplay2.1のドキュメントはhttp://play2-docs-snapshot.herokuapp.com/render/master/Homeです。このドキュメントはgithubにあり、各ブランチ/タグには独自のドキュメントがありますhttps://github.com/playframework/Play20/tree/master/documentation –

+4

はい、ドキュメントは絶対にひどいです – SobiborTreblinka

答えて

16

Iは、フォーム上のグローバルブートストラップ警告ボックスを表示するには、このコードを使用:

@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() 
       } 
      } 
     } 
    } 
} 
+0

有望です。それが動作するかどうかを確認して確認します。 – schlingel

+0

スニペットと運が良かったですか? – 2manyprojects

+3

2.1のform.errorsには、タプルの代わりに 'FormError'のSeqが含まれていますが、それ以外はほとんど変わりません。 – schmmd

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)); 
     }