在Play Framework 2中显示错误

时间:2013-01-12 13:14:24

标签: validation error-handling playframework playframework-2.0

首先,我想说明我认为2.0的Play文档非常非常糟糕。

我正在寻找一种方法在HTML选项下面放置一个验证错误,就像播放一样,会为自动生成的输入框执行此操作。

我尝试复制Play输入框生成的HTML代码的结构,但我确定我在HTML代码中缺少一些ifError-Scala模板行。

糟糕的是,无法找到Play< Play< 2.0文档。因此,如果您正在寻找文档中的解决方案,那么您将获得旧的,无法正常工作的文档。很沮丧!

2 个答案:

答案 0 :(得分: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()
                }
            }
        }
    }
}

答案 1 :(得分: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));
        }