4

問題は短いです。私は作成しましたが、 ip:datatable内に実際に要素があります。残念ながら、データテーブルには選択可能な行が必要であり、divは連携しません;)。したがって、解決策は手動で呼び出すことです。div要素にはonclickリスナーがありますが、データテーブルのrowSelectionをどのように呼び出す必要がありますか?Primefacesの要素の機能のリストはありますか?p:columndiv

コード:

<p:dataTable var="user" value="#{rec.friends}" rowKey="#{user.id}" widgetVar="friendscrollist"
        rendered="#{not empty rec.friends}" scrollable="true" rowIndexVar="findex"
        scrollHeight="500" scrollWidth="220" selectionMode="single" selection="#{rec.chosenFriend}" styleClass="friendscroll">
                <p:column width="198" id="friend#{findex}">
    <div class="friendlist" onclick="friendscrollist.clickRow(#{findex})" />
                </p:column>
                <p:ajax update=":leftform" event="rowSelect" />
                <p:ajax update=":leftform" event="rowUnselect" />
</p:dataTable>

もちろん、それは単純化されたバージョンであり、必要なものだけです。だから問題は何を呼ぶかですdiv onclick?

4

5 に答える 5

12

まさにあなたが必要としているものであるhas<p:dataTable widgetVar>unselectAllRows()functions 。selectRow(index)

<div onclick="friendscrollist.unselectAllRows(); friendscrollist.selectRow(#{findex})">

friendscrollist.残念ながら、これらの機能について利用できるドキュメントはありませんが、Chrome / Firebugでは、JSコンソールに入ると、オートコンプリートリストに利用可能なすべての機能のリストが表示されます。以下はChromeの画面です。

ここに画像の説明を入力してください

関数名に基づいてJSソースコードまたは常識を調べると、それらの関数が何をするのかがわかります。


更新:私は正直に立っています。これらの関数のいくつかは、実際にはPrimeFaces3.4ユーザーガイドに記載されています。これらは、第3.26章「DataTable」(146ページ)の「クライアント側API」セクションにあります。

于 2013-01-12T17:13:18.303 に答える
2

受け入れられたソリューションは、単一の選択テーブルでは機能しますが、複数の選択では機能しません。両方で機能するはずのこの問題を解決する別の方法は、代わりに次を使用することです<div>

<h:panelGroup layout="block">

これにより、列の内部がレンダリングさ<div>れ、onclickイベントの処理が妨げられることはありません。

于 2013-06-13T17:35:16.520 に答える
1

ページネーションの場合、次の方法でページごとの行の問題を制御できます。

friendscrollist.selectRow(#{rowIndex} - friendscrollist.paginator.getCurrentPage() * friendscrollist.paginator.cfg.rows);
于 2014-08-20T07:24:10.993 に答える
0

右クリックまたはコンテキストメニューで同様の問題に直面しているすべての人のために、別の情報を追加したいと思います。を使用している場合、右クリックイベントをキャプチャすることはできません<p:graphicimage>。どういうわけか、タグのoncontextmenuイベントがprimefacesから<img>削除されました。

行内の画像コンテンツを右クリックして行を選択する場合は、tagとoncontextmenuイベントを使用する必要があります。

<img src="..." oncontextmenu="dataTable.unselectAllRows();dataTable.selectRow(#{rowIndex});"/> 
于 2013-10-11T07:24:30.640 に答える
0

ページ付けが有効になっている場合は、次のように実行できます。

onmouseup="friendscrollist.unselectAllRows();friendscrollist.selectRow(#{rowIndex} - friendscrollist.paginator.getCurrentPage() * 15);"

15がテーブルの行数の場合。

プログラムで行数を取得する方法が見つかりませんでした...

于 2014-07-01T14:25:49.230 に答える