当我用Vaadin选择网格时,为什么我没有良好的行为?

时间:2017-04-12 13:12:12

标签: grid vaadin apache-cayenne

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

但是当我有一行以上时,它总是会编辑或选择我的第一行。

请参阅:在任何编辑/选择之前,它会打印好的值: enter image description here

但是当我尝试编辑/选择第二行(只需点击它)时,我有: enter image description here 那应该是用户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);

任何帮助都会非常有用!谢谢

编辑:我的类UserInfo通常是用户对象(getter和setter):

    public String getFirstName() {
        return firstName;
    }

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

我的类_UserInfo是从CayenneDataObject扩展的:

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

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

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;
}

1 个答案:

答案 0 :(得分:0)

我做了一个糟糕的错误!我不需要在对象UserInfo中定义getter和sette,我应该从_userInfo中获取数据