我使用Play Framework 1.2.5并在一定程度上使用自定义验证。我无法弄清楚如何验证Map并报告每个字段的错误。
我的实体有一个描述属性,允许用户将描述翻译成任意数量的语言。
public class MyEntity extends Model {
...
@Valid
public Map<Locale, String> description;
...
}
基本上我的表单包含每个语言环境的textarea。
<textarea rows="3" name="entity.description[en]" id="entity_description_en"></textarea>
<textarea rows="3" name="entity.description[da]" id="entity_description_da"></textarea>
我可以让它绑定,但是如何验证各个翻译,并在字段级别报告任何错误而不仅仅是entity.description?
更新: 我知道它可以作为控制器的一部分完成,如下所示,但我更愿意,如果所有验证仅在模型上。
public static void create(@Valid MyEntity entity) {
validateMapKey("entity.description", entity.description, Locale.ENGLISH);
validateMapKey("entity.description", entity.description, new Locale("da"));
if(validation.hasErrors()) {
params.flash(); // add http parameters to the flash scope
validation.keep(); // keep the errors for the next request
index();
}
...
}
private static void validateMapKey(String f, Map<Locale, ? extends Object> v, Locale l) {
validation.required(String.format("%s[%s]", f, l), v.get(l));
}
答案 0 :(得分:0)
@CheckWith注释可以帮助您..
@CheckWith(MyMapCheck.class)
public Map<Locale, String> description;
static class MyMapCheck extends Check {
public boolean isSatisfied(Object myEntityInstance, Object descriptionValue) {
return checkMyDescriptionAndReturnBoolean(description);
}
}