在 Play 中抛出全局验证错误

Throw Global Validation error in Play

我正在开始使用 Play Framework,现在正在研究 Play 的验证功能。我尝试验证表单字段,如下面的视图模型 class.

所示
public class ViewModel {

    @Required(message = "Please enter username")
    public String username;
    @Required(message = "Please enter the password")
    public String password;

}

下面是同样的简单演示 UI。

现在,我想在检查数据库时输入的用户名和密码不正确时抛出一条全局错误消息。

下面是我的控制器操作中的代码

        Form<ViewModel> formData = Form.form(ViewModel.class).bindFromRequest();
        if (formData.hasErrors()) {
            Logger.info("There are server side validation errors in the form..");
            return badRequest(index.render(formData));
        } else {
           if(notFoundInDb){
             //check against db
             // some db related code here assuming record not found in db  
             ViewModel user = formData.get();
             //formData.error("invalid username and password");
             return badRequest(index.render(formData));
           }else{
             //success
             return redirect("/nextAction");
           }
    }

我曾尝试使用 formData.error("invalid username and password");但不确定。在我显示全局错误消息的视图模板中,我使用了以下代码。

@if(signIn.hasGlobalErrors) {
  <p>
       @signIn.globalError.message
  </p>
}

如何从控制器操作中抛出一些不错的全局错误消息?我正在使用 Play 2.4.2 版本。

您可以使用 form.hasErrorsform.globalErrorsform("singleElementName").errors 来获取表单的验证错误,例如

@if(form.hasErrors) {
  // Does form has any error, global or individual?
}
@for(error <- form.globalErrors) {
  // Global errors, use @error.message to get the message
}
@for(error <- form("singleElementName").errors) {
  // Individual error for a single form element, use @error.message
}