このデータテーブルにはa4j:supportタグが付いているので、誰かが行をクリックしたときに、選択した行のステータスに基づいて特定のボタンを表示または非表示にします。
問題は、バッキングBeanのデータが常にワンクリック遅れていることです。
<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をクリックすると、メソッドは「THERE is no keys」になりますが、行2をクリックすると、メソッドには最初にクリックした行のキーがあります。
なぜ1クリック遅れているのですか?