我们在为表单验证/授权定义错误消息时尝试保持一致,但我们发现使用Play 2.0的@Constraints等有点困难。
我们想要的是能够访问每个错误(以及相关的i18n-translation),最好是通过错误对象。然而,这被证明是相当困难的,因为错误(至少来自@Constraint)被应用于ImplicitFieldConstructor中的i18n翻译,我们实际上并没有太多的访问权。
我们想知道的是,是否有办法在不通过ImplicitFieldConstructor的情况下访问表单中每个字段的所有FieldElements? (绝望地试过@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));
谢谢!
答案 0 :(得分:0)
如果您有权访问要添加验证的.java文件,则可以在Constraint中添加message =“Text”元素。这将改变显示的消息,而无需编写自己的自定义验证。
@Required(message = "Your message here!")
public String someField;