【问题标题】:can't find the way to bind a vaadin combobox找不到绑定 vaadin 组合框的方法
【发布时间】:2021-09-07 03:05:40
【问题描述】:

我的问题是我找不到绑定组合框的方法,我的目标是在单击表格(网格)后自动完成组合框: 组合框数据取自 BD Acception 表,但表数据取自 WordAcception 类

这些是它显示给我的错误: [在此处输入图片描述][1] [在此处输入图片描述][2]

WORDACCEPTION.java

 public class WordAcception implements Serializable, Cloneable {
        private String idacception = "";
        public String getIdacception() {
            return idacception;
        }
        
        public void setIdacception(String idacception) {
            this.idacception = idacception;
        }
    }

VISTA.java

private ComboBox<Acception> WordAcceptioncombo = new ComboBox<>("idacception");
 
        WordAcceptioncombo.setItemLabelGenerator(Acception::getIdAcception);    
        WordAcceptioncombo.setItems(AcceptionPersistence.getInstance().findAllIdAcception()); 

add(WordAcceptioncombo);

    wordacceptionGrid.asSingleSelect().addValueChangeListener(event ->
        formword.setWordAcception(wordacceptionGrid.asSingleSelect().getValue()));

WORDACCEPTIONFORM.java

 binder.bind(WordAcceptioncombo, Acception::getIdAcception,
                Acception::setIdAcception); 

   public void setWordAcception(WordAcception wordAcception) {
        if(wordAcception != null) { 
            System.out.println("setWordAcception= "+wordAcception.getIdacception());
            WordAcceptioncombo.setValue(wordAcception.getIdacception());
        }
        binder.setBean(wordAcception);

        if (binder.getBean() == null) {
            setVisible(false); 
        } else {
            setVisible(true); 
            idacception.focus();
        }  
    }

Aception.java

public class Acception implements Serializable, Cloneable {
private String idAcception = ""; 
public String getIdAcception() {
        return idAcception;
    }

    public void setIdAcception(String idAcception) {
        this.idAcception = idAcception;
    } 

}

////////////更新//////////

组合框由于 Acception 类而完成,因此我必须在 WordAcception 类中创建一个 Acception 实例才能获得该类的实例(这对我隐藏了问题,但组合框仍然存在不是自动填充)

ACCEPTION.JAVA

public class Acception implements Serializable, Cloneable {
     
    private Clase clase; 
  
    public Clase getClase() {
        return clase;
    }

    public void setClase(Clase clase) {
        this.clase = clase;
    } 

WORDACCEPTIONFORM.JAVA

binder.bind(WordAcceptioncombo, WordAcception::getAcception,
        WordAcception::setAcception);

但我没有注意到任何变化,组合框仍未填充

【问题讨论】:

    标签: java data-binding grid vaadin bind


    【解决方案1】:

    当您使用 getter 和 setter 获取与您的字段不同类型的值时,您通常会从 .bind 收到那种 is not applicable for the arguments 错误。在您的情况下,WordAcception.idAcceptionString 类型,但您的 ComboBox 设置为接收 Acception 类型的项目。

    如果您想要一个 ComboBox,让您可以选择哪个特定 id 属于此特定 WordAcception 并更改该 id(不更改 WordAcception 实例),ComboBox 的类型应该是 String。如果您想要一个为您选择特定 Acception 的 ComboBox,则需要为该类型的字段使用 getter 和 setter。

    与错误无关,我不太确定 Acception 和 WordAcception 之间是否应该有某种联系,但根据目前的示例,没有。您的意思是让其中一个扩展另一个?

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    相关资源
    最近更新 更多