で行の即時選択を試みましたが、セル テキストをクリックしても行が選択さprimefaces
<p:datatable>
れないことがわかりました。行を選択する場合は、エッジ セルをクリックする必要があります。
問題を解決するための任意のアイデア。
で行の即時選択を試みましたが、セル テキストをクリックしても行が選択さprimefaces
<p:datatable>
れないことがわかりました。行を選択する場合は、エッジ セルをクリックする必要があります。
問題を解決するための任意のアイデア。
少なくとも PrimeFaces 5.3 の状況で<p:outputLabel>
は、セルのコンテンツで a を使用すると、クリックして行を選択できなくなることがわかりました。回避策は、PrimeFaces ラベルを使用せず、代わりにデフォルトの JSF ライブラリを使用して、手の込んだ「ガジェット」を使用せずに単純にテキストを出力することです。
変化する:
<p:outputLabel value="#{item.description}" />
に:
<h:outputText value="#{item.description}"/>
質問が適切に配置されており、それが起こっていることを確認できます。Primefaces 3.5.7 では、著者のサイトで説明されているように、データテーブルのインスタント選択を使用しています。選択は、テーブルのファセット部分にヒットしない場合にのみ正しくトリガーされます! Mozilla Firefox 24 でテストしています。
彼の例では、列のファセット内にコンポーネントがないため、または celleditor が選択の例で誤動作を引き起こしている可能性があるため、機能することを述べさせてください。
<p:column headerText="Model" style="width:30%">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{car.model}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{car.model}" style="width:100%"/>
</f:facet>
</p:cellEditor>
</p:column>
代わりに彼は以下を使用しています:
<p:column headerText="Model">
#{car.model}
</p:column>
私が行ったこと (PF の作成者は、ソリューションを提供するために PRO サブスクライバーである必要があるため!) は、データテーブルの最初または最後に空の列を追加し、そこをクリックした場合にのみ、ユーザーはあなたが許可したことを実行できます。行う。
例えば:
<p:column headerText="Select" width="10">
</p:column>
数年後、しかし一体何だ - これはそこにいる誰かに役立つかもしれないと思った...
PF 5.3 でも同じ問題に遭遇しました。クリック イベントがテーブルの行に反映されないようです。これは、PF スクリプトの間違いです。以前の回答で述べたように、「公式」の修正が必要な場合は、PRO サポートを購入する必要があります... 一方、回避策をコーディングすることは不可能ではありません。実装または設計において、このサンプルの効率性を主張するものではありません。必要なのは次の関数だけです。これは、スクロール可能なテーブルとスクロールできないテーブルの両方で機能します。かなりの数のシナリオをテストしていませんが、開始する必要があります-更新を投稿してください:)
$(document).ready(function() {
attachShowEvent();
});
/*
* Seems that if the table is hidden then the ready functions
* wont fire...so you have to manualy attach the thing. Has
* to be an easier way - this would happen if the table is
* in a tabView tab which is not visible on page load. In this case you have to
* manualy attach the events when the tab gets selected
*/
function attachShowEvent(){
/*
* Fix hover pointer
*/
$('.ui-datatable-selectable label').hover(function() {
$(this).css('cursor','pointer');
});
/*
* attach click and double click events to p:outputLabel
*/
$('.ui-datatable-selectable label').click(function(event) {
tableLabelClicked(event);
});
/*
* dblclick doesnt work - something is explicity blocking it
* dont have the energy to find it:)
*/
$('.ui-datatable-sekectable label').dblclick(function(event){
tableLabelDblClicked(event);
});
}
function tableLabelClicked(event){
/*
* Trigger the "click" event on the parent td
*/
try{
$(event.target).parent().trigger( "click" );
}catch(e){
console.log(e);
}
}
function tableLabelDblClicked(event){
/*
* Trigger the "dblclick" event on the parent td
*/
try{
$(event.target).parent().trigger( "dblclick" );
}catch(e){
console.log(e);
}
}