1

次のような 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;
  }
}

次のようにレンダリングされます。

SetEnum

問題は、GXT FieldLabel にラップされていても、オプションがチェックされていないとフィードバックがないことです。したがって、検証は失敗し、ユーザーにはフィードバックがありません。

検証に失敗した場合、GXT FieldLabel はエディターの右側に赤いフラグを自動的に追加すると思いました。

  1. 私は何か間違っていますか?
  2. このフィードバックを取得するためのベスト プラクティスはありますか?
4

1 に答える 1