2013-01-12 47 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

我使用此代碼與表單上顯示一個自舉全球警告框:

@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's ​​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)); 
     }