为什么我 select 使用 Vaadin 的网格时没有良好的行为?

Why I don't have the good behavior when I select a grid with Vaadin?

我正在研究 Vaadin, 我正在尝试在网格中打印数据。我想要select这个数据。之前我想编辑数据,但似乎是在编辑之前。[我看了一下:https://vaadin.com/docs/-/part/framework/components/components-grid.html#figure.components.grid.editing]

但是当我有不止一行时,它总是会编辑或 select 我的第一行。

参见:在任何 edit/select 之前,它会打印正确的值:

但是当我尝试 edit/select 第二行(只需单击它)时,我有: 那应该是用户 ID:2,名字:wc,姓氏:sdsdf,...

我的代码是:

   grid.setItems(getUsersInfo());

   grid.addColumn(UserInfo::getUserId).setCaption("User Id");
   grid.addColumn(UserInfo::getFirstname).setCaption("First Name")
        .setEditorComponent(firstNameEditor, UserInfo::setFirstName);
   grid.addColumn(UserInfo::getLastname).setCaption("Last Name")
        .setEditorComponent(lastNameEditor, UserInfo::setLastName);
   grid.addColumn(UserInfo::getEmail).setCaption("Email")
        .setEditorComponent(emailEditor, UserInfo::setEmail);
   grid.addColumn(UserInfo::getAddress).setCaption("Address")
        .setEditorComponent(addressEditor, UserInfo::setAddress);
   grid.addColumn(UserInfo::getPhonenumber).setCaption("Phone Number");

   grid.setSizeFull();
   grid.setSelectionMode(SelectionMode.SINGLE);
   grid.getEditor().setEnabled(true);

   setCompositionRoot(grid);

任何帮助都会很有帮助!谢谢

编辑:我的 class UserInfo 是一个用户对象(getter 和 setter),通常是:

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        super.setFirstname(firstName);
    }

我的 class _UserInfo 是从 CayenneDataObject 扩展而来的:

    public void setFirstname(String firstname) {
        writeProperty(FIRSTNAME_PROPERTY, firstname);
    }
    public String getFirstname() {
        return (String)readProperty(FIRSTNAME_PROPERTY);
    }

编辑 2: 当我只打印数据而不编辑时,当我 select 一个数据时我遇到同样的问题,我的代码是:

final VerticalLayout vlayout = new VerticalLayout();

userInfo = getUsersInfo();
grid.setItems(userInfo);

grid.addColumn(UserInfo::getUserId).setCaption("User Id");

grid.setSizeFull();


vlayout.addComponent(new HeaderMenu());
vlayout.addComponent(grid);

vlayout.setSizeFull();
setCompositionRoot(vlayout);

编辑3:一步步调试后,我发现问题出在哪里: 问题是我从哪里得到我的 userId :

错误是:

Exception processing async thread queue
Exception processing async thread queue
org.eclipse.jdt.internal.debug.core.model.JDIType cannot be cast to org.eclipse.jdt.debug.core.IJavaReferenceType

开启:

public int getUserId() {
    return (getObjectId() != null && !getObjectId().isTemporary()) ? (short) getObjectId()
            .getIdSnapshot().get(USERID_PK_COLUMN) : null;
}

我犯了一个严重的错误!我不需要在对象 UserInfo 中定义 getter 和 sette,我应该从 _ userInfo

中获取数据