簡體   English   中英

Vaadin +復選框+表格+ JPAContainer =問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM