2013-03-26 2 views
0

У меня есть этот тип данных с тегом поддержки a4j: так что когда кто-то нажимает на строку, я хочу отображать или скрывать определенные кнопки в зависимости от состояния выбранной строки.Richfaces 3.3 extendedDataTable onRowClick устанавливает данные из предыдущей строки, нажав

Проблема в том, что данные в моем бэк-компоненте всегда находятся на одном шаге позади.

<rich:extendedDataTable 
    id="formSummaryTableId" 
    var="dataSummary" 
    value="#{FormSearch.summaries}" 
    binding="#{FormBacking.table}" 
    selection="#{FormSearch.selection}" 
    rowKeyVar="rkv" 
    frozenColCount="0" 
    sortMode="single" height="500px" width="795px" 
    cellpadding="0" cellspacing="0" border="0" rowClasses="even, odd" 
    selectedClass="itemSelected"> 

    <a4j:support event="onRowClick" actionListener="#{FormBacking.onClickForm}" 
     reRender="DesignerForm:formEditToolbar" /> 
.... 

FormBacking.onClickForm

public void onClickForm(ActionEvent e) 
{ 
    Iterator<Object> selectionKeys = getFormSearch().getSelection().getKeys(); 
    LOG.info("selectionKeys = "+selectionKeys.hasNext()); 
    if (selectionKeys.hasNext()) 
    { 
     LOG.info("selectionKeys.next()"); 
     Integer lookupKey = (Integer) selectionKeys.next(); 
     LOG.info("lookupKey = "+lookupKey); 
    } else { 
     LOG.info("THERE is no keys"); 
    } 
} 

EDIT

Я понял, что по какой-то причине, когда я щелкните строку, это не получает установлен правильно. Это похоже на 1 шаг позади моих кликов. Например, если я нажимаю строку 1 моего datatable, мой метод попадает в «ТЫ НЕ КЛЮЧИ», но если я сейчас нажму строку 2, мой метод будет иметь ключи для первой строки, которую я нажал.

Почему это 1 клик позади?

+0

Что вы имеете в виду, это повторное рендеринг раньше? Можете ли вы уточнить, как вы это проверяете? – Andrey

+0

Я имею в виду 'reRender =" DesignerForm: formEditToolbar "из тега a4j: support. – Catfish

+0

Я обновил свой вопрос. – Catfish

ответ

1

Использование onselectionchange событие:

<a4j:support event="onselectionchange" ... 

Я думаю, проблема с onRowClick является то, что он увольняют, прежде чем изменить выбор произойдет, поэтому он представляет предыдущее значение выбора.

+0

Удивительные работы, как шарм. Не знал об этом типе событий. – Catfish

+0

@Catfish Отлично. Полный набор поддерживаемых атрибутов/событий можно найти здесь: http://livedemo.exadel.com/richfaces-demo/richfaces/extendedDataTable.jsf?tab=info – Andrey