Validation 播放框架2中显示错误

Validation 播放框架2中显示错误,validation,error-handling,playframework,playframework-2.0,Validation,Error Handling,Playframework,Playframework 2.0,首先,我想声明,我认为2.0的播放文档非常非常糟糕 我正在寻找一种方法,将验证错误放在HTML选择下面,就像play为自动生成的输入框所做的那样 我试图复制播放输入框的结果HTML代码的结构,但我确信我的HTML代码中缺少了一些ifError Scala模板行 糟糕的是,对于Play

首先,我想声明,我认为2.0的播放文档非常非常糟糕

我正在寻找一种方法,将验证错误放在HTML选择下面,就像play为自动生成的输入框所做的那样

我试图复制播放输入框的结果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>
}

来自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));
        }
公共静态结果保存(){
Form boundForm=Form.bindFromRequest();
if(boundForm.hasErrors()){
字符串errorMsg=“”;
java.util.Map errorsAll=boundForm.errors();
for(字符串字段:errorsAll.keySet()){
errorMsg+=字段+“”;
for(ValidationError错误:errorsAll.get(字段)){
errorMsg+=error.message()+“,”;
}
}
闪光(“错误”,“请更正以下错误:”+errorMsg);
返回请求(detail.render(boundForm));
}

最新的play2.1文档在这里。该文档在github上,每个分支/标记都有自己的文档是的,文档绝对是非常好的。如果代码片段是2.1格式的,则errors包含一个
FormError
s的序列,而不是元组,但除此之外,它几乎没有变化。
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));
        }