私は Play Framework 1.2.5 を使用し、カスタム検証をある程度まで使用しています。Map の検証を行い、フィールドごとにエラーを報告する方法がよくわかりません。
私のエンティティには description プロパティがあり、ユーザーは説明を任意の数の言語に翻訳できます。
public class MyEntity extends Model {
...
@Valid
public Map<Locale, String> description;
...
}
基本的に、私のフォームにはロケールごとのテキストエリアが含まれています。
<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));
}