次のような JSR 303 検証を使用した POJO があります。
@NotNull
@Size(max = 80)
@Column(name = "trs_name")
private String name;
アプリケーションでは、GWT エディター内で GXT FieldLabel にラップされた GXT TextField を使用してレンダリングします。検証が失敗した場合、FieldLabel は自動的に赤い波と赤い旗を表示します。
そして、これはまさに私が必要としているものです。
しかし、このようなより複雑な検証の場合:
@Size(min = 1)
private Set<EnumRole> roles;
カスタムを作成しましたEditor<Set<Enum>>
:
public class EnumSetEditor<T extends Enum<T>> extends Composite implements LeafValueEditor<Set<T>> {
private Map<T, CheckBox> map;
public EnumSetEditor(Class<T> clazz) {
FlowPanel panel = new FlowPanel();
this.map = new HashMap<T, CheckBox>();
for(T t : clazz.getEnumConstants()) {
CheckBox cb = new CheckBox();
cb.setBoxLabel(I18nEnum.i18nEnum(t)); //translates the enum
panel.add(cb);
map.put(t, cb);
}
this.initWidget(panel);
}
@Override
public void setValue(Set<T> value) {
for(Map.Entry<T, CheckBox> entry : map.entrySet()) {
entry.getValue().setValue(value.contains(entry.getKey()));
}
}
@Override
public Set<T> getValue() {
Set<T> result = new HashSet<T>();
for(Map.Entry<T, CheckBox> entry : map.entrySet()) {
if(entry.getValue().getValue()) {
result.add(entry.getKey());
}
}
return result;
}
}
次のようにレンダリングされます。
問題は、GXT FieldLabel にラップされていても、オプションがチェックされていないとフィードバックがないことです。したがって、検証は失敗し、ユーザーにはフィードバックがありません。
検証に失敗した場合、GXT FieldLabel はエディターの右側に赤いフラグを自動的に追加すると思いました。
- 私は何か間違っていますか?
- このフィードバックを取得するためのベスト プラクティスはありますか?