我正在研究Vaadin, 我正在尝试在网格中打印数据。我想选择这些数据。以前我想编辑数据,但似乎是在编辑之前。[我看了一眼:https://vaadin.com/docs/-/part/framework/components/components-grid.html#figure.components.grid.editing]
但是当我有一行以上时,它总是会编辑或选择我的第一行。
但是当我尝试编辑/选择第二行(只需点击它)时,我有: 那应该是用户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;
}
答案 0 :(得分:0)
我做了一个糟糕的错误!我不需要在对象UserInfo中定义getter和sette,我应该从_userInfo中获取数据