0

rich:datatableとrich:columnを使用して拡張可能な列/行のシンプルなソリューションを作成しました。これは次のようになります。rich :dataTableを使用して拡張可能/折りたたみ可能なsubTableを作成する最良の方法

ファセットコードは次のように(簡略化されて)います:

<rich:dataTable id="detailtable"
    value="#{bean.model}"
    var="row"
    columns="2">
    <rich:column id="detail-check">
        <f:facet name="header">
            <h:selectBooleanCheckbox value="#{bean.expandAll}">
                <a4j:support event="onchange" action="#{bean.expandAllAction}"
                    reRender="detailtable" />
            </h:selectBooleanCheckbox>
        </f:facet>
        <h:selectBooleanCheckbox value="#{row.expanded}">
            <a4j:support event="onchange" reRender="detailtable" />
        </h:selectBooleanCheckbox>
    </rich:column>
    <!-- actual data column -->
    <rich:column id="detail-column"
        rendered="#{row.expanded}"
        breakBefore="true"
        colspan="2">
        <!-- detail column content -->
    </rich:column>
</rich:dataTable>

これにより、詳細ボックスをクリックすると列が展開されたテーブルが提供され、詳細列が実際の行の下に表示されます。バッキングBeanのexpandAllActionは、行を反復処理し、それらの拡張属性をバッキングBeanの場合と同じに設定するため、すべての行が拡張/非拡張されます。

ただし、これはInternet Explorer(IE7またはIE8)では正しく機能しませんが、FFおよびChromeでは機能します。ユーザーがチェックボックスをクリックすると、ページ上の他の場所をクリックするまで何もレンダリングされません。バッキングBeanとオブジェクトは更新されていますが、他の要素がクリックされるまで再レンダリングされません。

これはIEで再び邪悪なものですか、それともRichfacesのバグですか?IEとtbodyで同様の問題がいくつか見つかりましたが、修正されているはずです。バグレポートを提出することはできますが、それまでは簡単な回避策はありますか?

Richfacesのバージョンは3.3.1であり、Jboss4.2.1GAおよびバンドルされたSunRIで実行されます。

4

1 に答える 1

1

onclick
selectBooleanCheckBoxのFromtldocのような別のイベントを使用してみてください:「この要素がフォーカスを失い、フォーカスを取得してからその値が変更されたときに実行されるJavascriptコード」ですonchange「この要素上でポインタボタンがクリックされたときに実行されるJavascriptコード」です。onclick

昨日も同様の質問でした。BalusCのコメントの1つは、「ラジオ/チェックボックスの場合、変更イベントは特定のブラウザで2回クリックした場合にのみ発生する」という私の仮定を確認する可能性があります。

于 2009-11-18T15:53:57.817 に答える