如何在选定行更改时传递值?

How to pass a value on selected row change?

我有这个永久性问题,我有一个带有 value="#{myBean.Items}" var="itms" 的数据表,我想将所选项目传递给我的 bean class。

在列中,我们使用 <f:setPropertyActionListener value="#{itms}" target="#{myBean.selectedrow}" /> 来传递值,但我希望它用于行。 如何做到这一点?以及将此侦听器放在哪里?

非常感谢。

您使用的是哪个 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>

以下代码确保 even 在行选择更改时被触发:

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