我有一些带有 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会自动在编辑器右侧添加红旗,以防验证失败。
- 我做错了什么吗?
- 是否有获得此反馈的最佳实践?