我无法从我的视图中访问ValidationError消息。 我设法在我的视图中得到的唯一输出是:
[ValidationError(username,Too short, sorry ;),[6])]
[ValidationError(password,Confirmation password doesn't match,[])]
我只想输出错误消息:“太短,抱歉;”和“确认密码不匹配”。
我找到的解决方法是从表单中调用特定字段,然后访问错误消息:
@form("password").error.map(_.message).getOrElse("")
谢谢,
我的观点register.scala.html:
@if(form.hasErrors) {
<div class="form-group">
<div class="alert alert-danger col-lg-6 text-center">
@for((key, vamlue) <- form.errors){
@value<br />
}
</div>
</div>
}
我的控制器:
public static Result registerSubmit(){
Form<User> registerForm = form(User.class).bindFromRequest();
String passwordConfirmation = registerForm.field("passwordConfirmation").value();
if(!registerForm.field("password").valueOr("").equals(passwordConfirmation)){
ValidationError e = new ValidationError("password", "Confirmation password doesn't match");
registerForm.reject(e);
}
if (registerForm.hasErrors()){
// Handle Error
return badRequest(register.render(registerForm));
} else {
// Check if all data are fine
// TODO : Redirect to Login Page
return ok(register.render(registerForm));
}
}
最后是模型User.java:
@Required
@MinLength(6)
String username;
@Required
@Email
String email;
@Required
@MinLength(6)
String password;
答案 0 :(得分:5)
听起来您想要收集所有表单错误并将其显示在表单的顶部。我认为这是您希望在HTML模板中使用的代码块
@if(form.hasErrors) {
<div class="form-group">
<div class="alert alert-danger col-lg-6 text-center">
@for(entry <- form.errors.entrySet){
@for(error <- entry.getValue){
@error.message <br/>
}
}
</div>
</div>
}
如果将form.errors
地图从Java地图转换为Scala地图,您可以使您的代码块比嵌套的for循环更简洁,但这应该可以胜任。