首先我想说的是,我认为 2.0 的 Play 文档非常非常糟糕。
我正在寻找一种在 HTML 选择下放置验证错误的方法,例如 play 会为自动生成的输入框执行此操作。
我试图复制 Play 输入框生成的 HTML 代码的结构,但我确定我的 HTML 代码中缺少一些 ifError-Scala 模板行。
糟糕的是,无法找到 Play < 2.0 文档已经涵盖的主题的 Play 2.0 文档。因此,如果您在文档中寻找解决方案,您将使用旧的、无法正常工作的文档。非常令人沮丧!
首先我想说的是,我认为 2.0 的 Play 文档非常非常糟糕。
我正在寻找一种在 HTML 选择下放置验证错误的方法,例如 play 会为自动生成的输入框执行此操作。
我试图复制 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>
}
表单错误键值对的输出是带有@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()
}
}
}
}
}
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));
}