0

当我们为表单验证/授权定义错误消息时,我们试图保持一致,但我们发现使用 Play 2.0 的 @Constraints 等有点困难。

我们想要的是能够访问每个错误(以及相关的 i18n 翻译),最好是通过错误对象。然而,这被证明是相当困难的,因为错误(至少来自@Constraint)被应用于 ImplicitFieldConstructor 中的 i18n 翻译,我们实际上并没有太多访问权限。

我们想知道的是,是否有一种方法可以在不通过 ImplicitFieldConstructor 的情况下访问表单中每个字段的所有 FieldElement?(绝望地尝试了@helper.FieldElements)

当然,我们可以删除整个 @Constraints 并定义我们自己的验证器和验证方法,但这似乎有点违反直觉,因为我们想使用该框架来获得它的所有价值。

编辑:另外,我们试过这个:

    @for((key, value) <- loginForm.errors) {
        @value.get(0)
    }

但这只是给了我们消息(例如'error.required')而不是i18n-translation。

编辑

我们现在使用它作为修复它的黑客,但我想找到一种更好的方法来处理这个问题。

    if (loginForm.hasErrors()) {
        // TODO: find a better solution to handle this problem.
        for(Map.Entry<String, List<ValidationError>> entry : loginForm.errors().entrySet() ) {
            ValidationError oldError = entry.getValue().get(0);
            // applay i18n-translation to error message.
            ValidationError error = new ValidationError(oldError.key(),  Messages.get(oldError.message()), new ArrayList());
            entry.getValue().set(0, error);
        }
        return badRequest(index.render(loginForm));

谢谢!

4

1 回答 1

0

如果您有权访问您尝试添加验证的 .java 文件,那么一种选择是在您的约束中添加 message = "Text" 元素。这将更改显示的消息,而无需您编写自己的自定义验证。

@Required(message = "Your message here!")
public String someField;
于 2012-07-03T13:40:37.263 回答