![](/img/trans.png)
[英]Vaadin JPAContainer: ManytoOne relation with EmbeddedID
[英]Vaadin + Checkbox + Table + JPAContainer = Problems
我試圖在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正在調用實體中的惰性屬性,生成許多查詢並使所有過程變慢)。 那么我如何設置一個偵聽器或類似的東西,使用戶每次單擊(或取消單擊)一個復選框時都可以訪問整個項目(而不僅僅是checkbox屬性)? 我正在使用Vaadin。 Hibernate 4 / JPA和Spring。
謝謝你的幫助。
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;
}
});
我如何設置一個偵聽器或類似的東西,使每個用戶單擊(或取消單擊)一個復選框都可以訪問整個項目(而不僅僅是checkbox屬性)
“整個物品”是什么意思? 表itemId? 實體對象?
您可以在vaadin表中將實體對象用作itemId。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.