【问题标题】:How do I enforce the order which error messages are displayed when using validation annotations?使用验证注释时,如何强制执行错误消息的显示顺序?
【发布时间】:2014-11-25 11:59:31
【问题描述】:

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

型号

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>
    }
}

配置/消息

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

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

【问题讨论】:

    标签: playframework playframework-2.1


    【解决方案1】:

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

    【讨论】:

    • 我自己真的应该先查看源代码...谢谢。
    • 这可能是一个有效的拉取请求。去贡献! :-)
    • 找到了解决办法,看我的回答。这不是最好的,但可以满足我的需要。 +1 寻求帮助:)
    • 至少比扩展 Form 容易得多。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      这允许人们...

      1. ... 在模型类like described here 上实现public List&lt;ValidationError&gt; validate()

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

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

      【讨论】:

      • 这并没有回答有关如何订购错误消息的问题。
      • 您在模型的 validate() 实现中定义排序。在 play 2.5 中,由于 Form.errors 的内部数据结构,无法保留排序。从 play 2.6 开始,可以按照 validate 添加错误的顺序检索错误。答案已编辑。还通过引用确切版本更正了指向allErrors() 实现的链接。
      • 嗨@DavidSpence 我通过引用正确的分支更正了指向源的链接。这应该使它更清楚。我遇到了与您的问题中描述的完全相同的问题。更新到玩 2.6 对我有用。
      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多