Значение propertyId таблицы равно null при использовании setCellStyleGenerator

Я новичок в Vaadin, но у меня есть некоторый опыт работы с Java Swing.

Я пытаюсь использовать table.setCellStyleGenerator, чтобы установить цвет конкретной ячейки с заголовком столбца «Имя».

Я работаю над примером в книге vaadin:

Table table = new Table("Table with Cell Styles");
    table.addStyleName("checkerboard");

    table.addContainerProperty("0",String.class,null,"Name", null,  null);
    table.addContainerProperty("1",String.class,null,"Surname", null,  null);
    table.addContainerProperty("2",Date.class,null,"Date.", null,  null);
    table.addContainerProperty("3",Integer.class,null,"Required.", null,  null);
    table.addContainerProperty("4",Integer.class,null,"Complete", null,  null);


    table.addContainerProperty("5",String.class,null,"Cakes", null,  null);
    table.addContainerProperty("6",Integer.class,null,"Cake Quantity", null,  null);
    table.addContainerProperty("7",String.class,null,"Status", null,  null);
    table.addContainerProperty("8",TextField.class,null,"Notes", null,  null);

Я заполнил свою таблицу следующим образом:

/* Add a few items in the table. */
    table.addItem(new Object[] {
        "Nicolaus","Copernicus",new Date("21/05/2011"), new Integer(1473), new Integer(1), "Cake",  new Integer(1473), "cakestatus", commentsField }, new Integer(3)); 

Я могу общаться со своей таблицей стилей, но когда я пытаюсь сделать следующее:

table.setCellStyleGenerator(new Table.CellStyleGenerator() {
        public String getStyle(Object itemId, Object propertyId) {
            int row = ((Integer)itemId).intValue();
          int col = Integer.parseInt((String)propertyId);


         System.out.println("COL:"+ col);  
            // The first column.
          if (col == 0)
             return "rowheader";
                                  .... 

[b]PropertyId[/b] имеет значение null.

и Tomcat извергает следующее:

СЕРЬЕЗНАЯ: ошибка терминала:
java.lang.NumberFormatException: null
в java.lang.Integer.parseInt (неизвестный источник)

Я почти уверен, что делаю ошибку новичка.

Кстати, доступ к моим стилям.css осуществляется следующим образом:

mainWindow.setTheme("colouredCells");

/* Create the table with a caption. */
Table table = new Table("Table with Cell Styles");
table.addStyleName("checkerboard"); 

и CSS содержит следующее:

@import url(../colouredCells/styles.css);
/* Using the old default theme (runo) as the basis for now */





/* Center the text in header. */
.v-table-header-cell {
    text-align: center;
}

/* Basic style for all cells. */
.v-table-checkerboard .v-table-cell-content {
    text-align: center;
    vertical-align: middle;
    padding-top: 12px;
    width: 20px;
    height: 28px;
}

/* Style specifically for the row header cells. */
.v-table-cell-content-rowheader {
    background: #E7EDF3
     url(../default/table/img/header-bg.png) repeat-x scroll 0 0;
}

/* Style specifically for the "white" cells. */
.v-table-cell-content-white {
    background: white;
    color: black;
}

/* Style specifically for the "black" cells. */
.v-table-cell-content-black {
    background: #60497b;
    color: white;
}

person van    schedule 31.05.2011    source источник
comment
Не рассматривая должным образом что-либо еще, по крайней мере, правило импорта CSS указывает на неправильный URL-адрес: я полагаю, вы хотели бы расширить либо Руно, либо Северный олень, поэтому он должен сказать @import url(../styles/runo/styles.css ); И тему тоже надо указывать приложению, а не mainWindow (хотя думаю разницы нет), просто так обычно и делается.   -  person Jouni    schedule 01.06.2011


Ответы (1)


Причина нулевого свойстваId объясняется в javadoc для CellStyleGenerator : генератор стиля ячейки также вызывается, чтобы дополнительно установить стиль для каждой строки, и в этом сценарии свойствоId равно нулю. Вы, вероятно, захотите просто вернуть null, если свойствоId равно null.

person van    schedule 01.06.2011