2015-05-15 2 views
1

У меня есть эта постоянная проблема, у меня есть Datatable с value="#{myBean.Items}" var="itms", и я хочу передать выбранный элемент в свой класс bean.Как передать значение при изменении выбранной строки?

В колонках мы используем <f:setPropertyActionListener value="#{itms}" target="#{myBean.selectedrow}" />, чтобы передать значение, но я хочу его для строк. Как это сделать ?, и где поставить этого слушателя ?.

спасибо.

+0

Не указывает ли один 'itms' содержимое всей строки? – kolossus

+0

Спасибо, да. – TiMr

ответ

1

Какую версию richface вы используете?

Для RichFaces 4.3.x, следующий пример может сделать трюк:

XHTML:

<rich:extendedDataTable 
    id="myTable" 
    value="#{crudBean.rows}" 
    var="rowItem" 
    rowClasses="odd-row, even-row" 
    selection="#{crudBean.actionForm.selection}" 
    rows="#{crudBean.actionForm.occurrences}" 
    rowKeyVar="idx" 
> 
    <a4j:ajax event="selectionchange" 
    listener="#{crudBean.actionForm.selectionListener}" 
    immediate="true" /> 
    <rich:column width="100px" styleClass="#{rowItem.className}"> 
    ...stuff... 
    </rich:column> 
    <rich:column width="173px" styleClass="#{rowItem.className}"> 
    ...stuff... 
    </rich:column> 
</rich:extendedDataTable> 

Следующий код убедился, что даже был уволен по изменению выбора строки:

<a4j:ajax event="selectionchange" 
    listener="#{crudBean.actionForm.selectionListener}" 
    immediate="true" /> 

Фасоль:

public void selectionListener(AjaxBehaviorEvent event) { 
    UIExtendedDataTable currentDataTable = (UIExtendedDataTable) event.getComponent(); 
    Object originalKey = currentDataTable.getRowKey(); 

    // debug log statement 
    log.debug("selectionListener() - rowKey = {} ", originalKey); 
    // debug log statement 
    if (log.isDebugEnabled()) { 
    log.debug("\n selectionListener() - rowIndex = {}", currentDataTable.getRowIndex()); 
    } 
    if (currentDataTable.isRowAvailable()) { 
    // selectionItems.add(dataTable.getRowData()); 
    IDataRow rowValue = transform((IDataGridRow)currentDataTable.getRowData()); 
    changeActiveRow(rowValue); 
    } 
} 
+0

Спасибо, просто чтобы получить эту идею, пожалуйста, обновите свой ответ, чтобы уточнить следующее: 1-) В коде selectionListener в моем Bean, как я могу использовать значение idx. 2-) Что такое вхождения и свойства выбора. Благодарю. – TiMr

+1

на стороне bean-компонента вы не используете idx, а выбранную строку (число). Выбор строки - это триггер для того, что я слушаю для действия (mouseclick на строке или спуска/вверх с клавиатурой) –

+0

Спасибо за этот отличный ответ. – TiMr