首先,我想說明的是,我認爲2.0的Play文檔確實非常糟糕。Play Framework中的顯示錯誤2
我正在尋找一種方法來將驗證錯誤置於HTML選擇之下,就像播放會自動生成輸入框一樣。
我試圖複製播放輸入框的結果HTML代碼的結構,但我確定我錯過了我的HTML代碼中的一些ifError-Scala模板行。
對於很難找到Play 2.0文檔已經涵蓋的Play < 2.0文檔。因此,如果您要在文檔中尋找解決方案,您將着陸在舊的,不工作的文檔上。非常令人沮喪!
首先,我想說明的是,我認爲2.0的Play文檔確實非常糟糕。Play Framework中的顯示錯誤2
我正在尋找一種方法來將驗證錯誤置於HTML選擇之下,就像播放會自動生成輸入框一樣。
我試圖複製播放輸入框的結果HTML代碼的結構,但我確定我錯過了我的HTML代碼中的一些ifError-Scala模板行。
對於很難找到Play 2.0文檔已經涵蓋的Play < 2.0文檔。因此,如果您要在文檔中尋找解決方案,您將着陸在舊的,不工作的文檔上。非常令人沮喪!
我使用此代碼與表單上顯示一個自舉全球警告框:
@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()
}
}
}
}
}
看起來很有希望。我會檢查並確認它是否有效。 – schlingel
任何運氣與片段? – 2manyprojects
在2.1中,form.errors包含一個'FormError's Seq而不是元組,但除此之外,它幾乎沒有改變。 – schmmd
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));
}
最新的play2.1文檔在這裏http://play2-docs-snapshot.herokuapp.com/render/master/Home。本文檔在github上,每個分支/標籤都有自己的文檔https://github.com/playframework/Play20/tree/master/documentation –
是的,文檔是絕對可怕的 – SobiborTreblinka