当我们为表单验证/授权定义错误消息时,我们试图保持一致,但我们发现使用 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));
谢谢!