1

私は 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));
}
4

1 に答える 1

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);
    }
}
于 2013-03-20T09:10:24.093 に答える