我正在尝试在Vaadin 7中创建一个使用JPAContainer作为数据源的表。在此表的其中一列中,我有一个生成列来创建一个复选框。我使用了文档的方向,我有类似的东西:
table.addGeneratedColumn(CHECKBOX_COLUMN, new Table.ColumnGenerator() {
@Override
public Object generateCell(final Table source, final Object itemId, Object columnId) {
final CheckBox checkBox = new CheckBox("", isItemIdSelected(source, itemId));
checkBox.addValueChangeListener(new Property.ValueChangeListener() {
@Override
public void valueChange(Property.ValueChangeEvent valueChangeEvent) {
}
});
用户选择他想要的行后,可以按一下保存按钮。
此时,我试图循环遍历整个表(使用table.getItemsIds()),检查每个项目的checkbox属性,如果选中/选中,我添加项目(行/实体)从JPAContainer)到稍后将处理的集合。但是我在这个循环中遇到严重的性能问题(JPA在实体中调用惰性属性,生成许多查询并使一切变得非常慢)。那么我如何设置一个监听器或类似的东西,允许每个用户点击(或取消忽略)一个复选框的整个项目(而不仅仅是复选框属性)?我在用Vaadin。 Hibernate 4 / JPA和Spring。
感谢您的帮助。
答案 0 :(得分:3)
table.addGeneratedColumn(CHECKBOX_COLUMN, new Table.ColumnGenerator() {
@Override
public Object generateCell(final Table source, final Object itemId, Object columnId) {
final CheckBox checkBox = new CheckBox();
checkBox.addValueChangeListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
/*
* do something with the itemId
*/
//cast to Person entity if your table itemId is an entity object
Person person = (Person) itemId;
person.setActive(checkBox.getValue());
}
});
return checkbox;
}
});
答案 1 :(得分:-1)
我如何设置一个允许的监听器或类似的东西 每个都可以访问整个项目(不仅仅是复选框属性) 用户点击(或取消选中)复选框
你对“整个项目”是什么意思?表itemId?实体对象?
您可以在vaadin表中将实体对象用作itemId。