You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-user@incubator.apache.org by Cosma Colanicchia <co...@gmail.com> on 2006/07/07 07:38:04 UTC

af:table and single selection, how to get the selected row?

Hi,

I'm trying to do a single row selection with <af:table>. I used a
rowSelection attribute that made the radio button display, but in the
OTN docs I haven't found its documentation.. is it a Trinidad
enhancement?

My question is: with an <af:commandButton> outside of the table, how
can I get the currently selected row? Is it simpler if I put the
button in the table footer? Can't find any docs on this.

Thank you
Cosma

Re: af:table and single selection, how to get the selected row?

Posted by Cosma Colanicchia <co...@gmail.com>.
Ok, I'm using a binding to find the selected row.

But I have another problem: I need to "preset" the selected row to
some value. How I can do this? I've found this doc about the ADF Faces
table at [1]:

"The current selection of rows on the Table can be programmatically
inspected and modified via the  RowKeySet  object obtained by calling
getSelectionState()  on the Table. The rowKeys of the currently
selected rows can be accessed via the  getRowKeyIterator()  method on
the  RowKeySet  instance. To programmatically change a selection, the
appropriate row must first be made current by calling
setRowIndex(...)  or  setRowKey(...)  on the Table. Then the selection
of the row may be changed by calling  add()  or  remove()  on the
RowKeySet."

I can't find the getSelectionState(), but I tried this way:

public RowKeySet getSelectedRow() {
  MyObjectType valueToSelect = getSelectedValueSomeHow();
  if (valueToSelect != null) {
    CoreTable table = _boundTable; // _boundTable is set with a binding
    int rows = _boundTable.getRows();
    for (int i=0; i<rows; i++) {
      // Set the current row to check the RowData
      _boundTable.setRowIndex(i);
      MyObjectType rowData = (MyObjectType) _boundTable.getRowData();
      if (rowData .equals(valueToSelect )) {
        // Row found, get the rowkey and return it
        RowKeySetImpl keySet = new RowKeySetImpl();
        keySet.add(_boundTable.getRowKey());
        return keySet;
      }
   }
 }
 // Row to select not found
  return null;
}

This method is bound to the selectedRowKeys attribute of <af:table>.
The problem is that, when _boundTable.setRowIndex(i) is called, the
getSelectedRow() method is again called (looks like it is internally
saving some state), causing an infinte loop.

On the other hand, I have no way to obtain the RowKey of a row without
setting it as current and calling getRowKey(). The object bound to the
"value" attribute is a simple ArrayList, so I think that rowkeys are
automatically generated.

I'm stack and documentation is lacking or obsolete. Can anyone help me? TIA
Cosma


2006/7/7, Cosma Colanicchia <co...@gmail.com>:
> Hi,
>
> I'm trying to do a single row selection with <af:table>. I used a
> rowSelection attribute that made the radio button display, but in the
> OTN docs I haven't found its documentation.. is it a Trinidad
> enhancement?
>
> My question is: with an <af:commandButton> outside of the table, how
> can I get the currently selected row? Is it simpler if I put the
> button in the table footer? Can't find any docs on this.
>
> Thank you
> Cosma
>