Richfaces 3.3 extendedDataTable onRowClick устанавливает данные из предыдущего щелчка строки

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

Проблема в том, что данные в моем резервном компоненте всегда отстают на один клик.

<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");
    }
}

ИЗМЕНИТЬ

Я понял, что по какой-то причине, когда я нажимаю на строку, она не устанавливается правильно. Как будто он на 1 шаг отстает от моих кликов. Например, если я щелкну строку 1 моей таблицы данных, мой метод попадет в «ТАМ нет ключей», но если я сейчас щелкну строку 2, мой метод будет иметь ключи для первой строки, которую я щелкнул.

Почему отстает на 1 клик?


person Catfish    schedule 26.03.2013    source источник
comment
Что вы имеете в виду, это повторный рендеринг раньше? Можете пояснить, как вы это проверяете?   -  person Andrey    schedule 27.03.2013
comment
Я имею в виду reRender="DesignerForm:formEditToolbar" тега a4j:support.   -  person Catfish    schedule 27.03.2013
comment
Я обновил свой вопрос.   -  person Catfish    schedule 27.03.2013
comment
Я бы отлаживал метод formSearch#setSelection и проверял, передано ли правильное значение в качестве аргумента.   -  person Andrey    schedule 27.03.2013


Ответы (1)


Используйте событие onselectionchange:

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

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

person Andrey    schedule 27.03.2013
comment
Удивительно работает как шарм. Не знал о таком типе события. - person Catfish; 27.03.2013
comment
@Catfish Отлично. Полный набор поддерживаемых атрибутов/событий можно найти, например, здесь: liveemo.exadel.com/richfaces-demo/richfaces/ - person Andrey; 27.03.2013