微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

找不到绑定 vaadin 组合框的方法

如何解决找不到绑定 vaadin 组合框的方法

我的问题是我找不到绑定组合框的方法,我的目标是在单击表格(网格)后自动完成组合框: 组合框数据取自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);

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

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。