0

このデータテーブルには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クリック遅れているのですか?

4

1 に答える 1

1

onselectionchangeイベントの使用:

<a4j:support event="onselectionchange" ...

onRowClick問題は、選択の変更が発生する前に起動されるため、以前の選択値を送信することだと思います。

于 2013-03-27T16:04:36.277 に答える