Данните на GWT CellTable не се показват

Имам следния код в моите модули onModuleLoad() метод:

    List<MyPromo> promotionData = new ArrayList<MyPromo>();
    MyPromo promotion1 = new MyPromo(...);
    promotionData.add(promotion1);

    PromotionTable<MyPromo> promoTable = new PromotionTable<MyPromo>(tableColumns, promotionData);

и

public class PromotionTable <T extends Promotion> extends CellTable<T>{

    public PromotionTable(List<ColumnGroup<T>> columns, List<T> data) {
        super();
        this.setWidth("100%");
        this.setHeight("500px");

        this.setHeaderBuilder(new PromotionTableHeaderBuilder(columns, this));
        this.setFooterBuilder(new PromotionTableFooterBuilder(this));

        ListDataProvider<T> dataProvider = new ListDataProvider<T>();
        dataProvider.setList(data);
        dataProvider.addDataDisplay(this);
    }
    ...

Колоните за CellTable просто отнемат свойства от MyPromo обекта и връщат String стойност за показване. В таблицата обаче не се показва нищо, само заглавките на колоните. Някаква идея защо е така?


person James    schedule 20.02.2013    source източник
comment
Вашият обект за промоция1 има ли данни?   -  person Suresh Atta    schedule 20.02.2013
comment
Какво точно прави setHeaderBuilder()? Добавя ли изрично колоните към CellTable?   -  person enrybo    schedule 20.02.2013
comment
@Suresh да, населено е   -  person James    schedule 20.02.2013
comment
@enrybo конструира заглавките на таблицата (т.е. полета за заглавия и т.н.)   -  person James    schedule 20.02.2013
comment
Извиква ли някога PromotionTable.addColumn(column)?   -  person enrybo    schedule 20.02.2013
comment
Да, той извиква addColumn за всеки   -  person James    schedule 20.02.2013
comment
Вероятно би било по-лесно да разберете проблема с повече код. Както и да е, следващото нещо, което бих проверил дали getValue() във вашата колона обекти връщат стойностите.   -  person enrybo    schedule 20.02.2013
comment
Благодаря за помощта, успях да реша проблема. Създавах dataProvider и го присвоявах на celltable (или mu разширението на) в конструктора. Това не ми хареса по някаква причина, когато го преместих, проработи.   -  person James    schedule 20.02.2013


Отговори (3)


Проблемът е със следния код

    ListDataProvider<T> dataProvider = new ListDataProvider<T>();
    dataProvider.setList(data);
    dataProvider.addDataDisplay(this);

Докато правите setList, ListDataProvider трябва да знае своите потребители, т.е. дисплеи (Вижте изпълнението на setList).

Така че редът на кода е грешен. Първо направете addDataDisplay и след това направете setList. Ще работи.

person Adarsha    schedule 21.02.2013

Създавах dataProvider и го присвоявах на celltable (или mu разширението на) в конструктора. Това не ми хареса по някаква причина, когато го преместих, проработи.

person James    schedule 20.02.2013

Ето прост пример за CellTable, SimplePager и ListDataProvider.

    CellTable<AlarmDisplayBTO> cellTable= new CellTable<AlarmDisplayBTO>();
    TextColumn<AlarmDisplayBTO> dateColumn = new TextColumn<AlarmDisplayBTO>() {
        @Override
        public String getValue(AlarmDisplayBTO object) {
            return object.getDate();
        }
    };
    cellTable.addColumn(dateColumn, "Date");
    TextColumn<AlarmDisplayBTO> alarmNameColumn = new TextColumn<AlarmDisplayBTO>() {
        @Override
        public String getValue(AlarmDisplayBTO object) {
            return object.getAlarmName();
        }
    };
    cellTable.addColumn(alarmNameColumn, "Alarm Name");

    cellTable.setRowCount(alarmList.size());
    // alarmList is an ArrayList<AlarmDisplayBTO> rendered from RPC call
    cellTable.setRowData(0, alarmList); 
    cellTable.setEmptyTableWidget(new Label(" No Records Found"));

    ListDataProvider<AlarmDisplayBTO> dataProvider = new ListDataProvider<AlarmDisplayBTO>();
    dataProvider.addDataDisplay(cellTable);
    dataProvider.setList(alarmList);

    SimplePager pager = new SimplePager();
    pager.setDisplay(cellTable);
    pager.setPageSize(20); // 20 rows will be shown at a time

    VerticalPanel vPanel = new VerticalPanel();
    vPanel.add(cellTable);
    vPanel.add(pager);

    setWidget(new ScrollPanel(vPanel));

Надявам се това да помогне..

person RaiVikrant    schedule 26.11.2014