ADF Table とデータコントロールの選択状態同期

だんだん内容がショボくなって参ります。

データコントロールツリーからコレクションをデザイナ上にドラッグ・ドロップしてTableを構成するとき、行選択を有効にしておくと勝手に選択状態が同期するようになるのですが、一度行選択を無効にして構成してしまうと、後で RowSelection 属性の値だけ変えても、見かけ上は行選択できるようになりますが、データコントロールまで反映されません。

で、毎回「どの属性設定するんだっけ…」と悩むことになるので、ここにメモしときます。

選択状態の同期は、af:table 要素の以下の2つの属性にEL式を設定します。

  • selectionListener : #{bindings.(DC名).collectionModel.makeCurrent}
  • selectedRowKeys : #{bindings.(DC名).collectionModel.selectedRow}

selectionListener属性で、Tableの選択状態の変更を拾ってデータコントロールへつなげ、selectedRowKeysでデータコントロールの選択状態をTableに反映する、という感じ。

あと、アクションメソッド内で「選択された行の項目Nを取得したい」なんてときは、無理にRichTableオブジェクトごゴニョゴニョするよりは、同期するデータコントロールの取得したい項目を個別にバインドしておいて、EL式#{bindings.(項目名).inputValue}などで取ったほうが楽です。

参考:

http://otndnld.oracle.co.jp/document/products/jdev/11/doc_cd/web.1111/B52028-01/web_tables_forms.htm