如何强制使用验证注释时显示错误消息的顺序?

时间:2014-11-25 11:59:32

标签: playframework playframework-2.1

我有以下模型,视图和错误消息。

模型

public class LoginModel {
    @Required(message = "validation.required.email")
    public String email;

    @Required(message = "validation.required.password")
    public String password;
}

查看

@for((field, validationErrors) <- myForm.errors) {
    @for(validationError <- validationErrors) {
        <li>@Messages(validationError.message)</li>
    }
}

CONF /消息

error.no_email=You must enter an email
error.no_password=You must enter a password

“您必须输入电子邮件”前面出现“您必须输入密码”消息。我希望他们按照我在表格上的相同顺序(电子邮件后跟密码)。有没有办法定义在通过验证注释播放自动添加错误时显示错误消息的顺序?

3 个答案:

答案 0 :(得分:2)

Play Form在内部使用HashMap来存储验证错误,因此不会强制执行订单。您可以从github获取来源,扩展表单并将HashMap次出现替换为LinkedHashMap

答案 1 :(得分:2)

有点被无意中听到(我不喜欢这个解决方案),但可以通过:

@for(error <- form("email").errors) {
    <li>@Messages(error.message)</li>
}

@for(error <- form("password").errors) {
    <li>@Messages(error.message)</li>
}

这仍然意味着每个字段都不保证邮件的顺序,但至少您可以在字段级别强制执行订单,以便它们可以匹配表单上字段的顺序。

答案 2 :(得分:0)

播放2.6.0 中,引入了方法allErrors()。它返回所有错误的不可修改的列表。

这允许一个......

1。 ...在模型类like described here实施public List<ValidationError> validate()

2。 ...在测试form.hasErrors()时,稍后在控制器中检索有序列表。

在播放2.6之前的版本中,这是不可能的,因为错误是stored in a map。由于播放2.6表单错误为stored in a list,而errors()已被标记为已弃用。