我们的gwt应用使用ValueListBox
,
records.setValue(model);
records.setAcceptableValues(models);
model
是models
的子集。我遇到的问题是ValueListBox包含重复的值。如何预防或删除它?
答案 0 :(得分:4)
尝试使用以下内容。
records.setAcceptableValues(new HashSet<String>(models);
如果它是用户定义的对象而不是字符串等,那么你必须实现hashcode和equals。
答案 1 :(得分:2)
覆盖setAcceptableValues
方法
@Override
public void setAcceptableValues(Collection<T> newValues) {
super.setAcceptableValues(new HashSet<T>(newValues));
}
示例代码:
ValueListBox<Integer> semester = new ValueListBox<Integer>(new Renderer<Integer>() {
public String render(Integer object) {
String s = "";
if (object != null) {
s = object.toString();
}
return s;
}
public void render(Integer object, Appendable appendable) throws IOException {
String s = render(object);
appendable.append(s);
}
}) {
@Override
public void setAcceptableValues(Collection<Integer> newValues) {
super.setAcceptableValues(new HashSet<Integer>(newValues));
}
};
semester.setAcceptableValues(Arrays.asList(1, 1, 3, 3, 2, 2, 3, 4, 5, 7, 8, 9, 1, 3, 2));
semester.setValue(2);
- 编辑 -
根据您的上一条评论,试试这个
class MyModel {
private String id;
private String name;
public MyModel(String id, String name) {
this.id = id;
this.name = name;
}
public String getName() {
return name;
}
@Override
public int hashCode() {
return this.id.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof MyModel) {
return this.id.equals(((MyModel) obj).id);
}
return false;
}
}
ValueListBox<MyModel> semester = new ValueListBox<MyModel>(new Renderer<MyModel>() {
public String render(MyModel object) {
String s = "";
if (object != null) {
s = object.getName();
}
return s;
}
public void render(MyModel object, Appendable appendable) throws IOException {
String s = render(object);
appendable.append(s);
}
}) {
@Override
public void setAcceptableValues(Collection<MyModel> newValues) {
super.setAcceptableValues(new HashSet<MyModel>(newValues));
}
};
semester.setAcceptableValues(Arrays.asList(new MyModel("1", "a"), new MyModel("1", "a"),
new MyModel("2", "b"), new MyModel("3", "c")));
semester.setValue(new MyModel("1", "a"));
答案 2 :(得分:0)
没有方法可以阻止或删除ListBox或ValueListBox中的重复选项。在将它们传递给ValueListBox之前,必须删除重复的值。