MultiSelectComboBox 的方法选择不起作用

问题描述 投票:0回答:1

我有一个

MultiSelectComboBox
,但是当尝试通过其
select()
方法选择某些项目时,没有任何反应。

我的代码如下:

Binder<Technology> binder = new BeanValidationBinder<>(Technology.class);
MultiSelectComboBox<TechnologyLabel> multiComboBox = new MultiSelectComboBox<>("Labels");

binder
                .forField(this.multiComboBox)
                .bind(Technology::getLabels, Technology::setLabels);

        List<TechnologyLabel> labelList = technologyLayout.technologyLabelService.getTechnologyLabels(technology);
        List<Label> containedLabels = new ArrayList<>();
        for (var tl : labelList) {
            containedLabels.add(tl.getLabel());
        }
        List<Label> labels = labelService.findAllLabels();

        for (var label : labels) {
            if (!containedLabels.contains(label)) {
                labelList.add(new TechnologyLabel(technology, label));
            }
        }
        multiComboBox.setItems(labelList);
        multiComboBox.setItemLabelGenerator(TechnologyLabel::getLabelName);
        note.setMaxHeight("10em");

        multiComboBox.select(labelList.get(0);

我上面所做的是查询我的

ManyToMany
关系,以找到给定
labels
的所有
technology
。然后我找到所有
labels
并从中创建一个
list
。最后,我尝试选择列表的第一项,但它旁边没有显示勾号。

java vaadin multi-select
1个回答
0
投票

基本上使用@cfrick作为答案,所有功劳都归他所有,但我想留下一个正确的答案。我遇到了同样的问题,我在我的

equals
中定义了
hashcode
TechnologyLabel
方法,它开始工作。我只需在代码中通过
id
进行比较即可。

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null || getClass() != obj.getClass()) {
        return false;
    }
    TechnologyLabel technologyLabel = (TechnologyLabel) obj;
    return Objects.equals(id, technologyLabel.id);
}

@Override
public int hashCode() {
    return Objects.hash(id);
}
© www.soinside.com 2019 - 2024. All rights reserved.