2011-06-18 51 views
6

Beanプロパティに基づいて、Primefacesの特定の行セットに対して無線ベースの行選択を無効にする方法があるかどうかを知りたいと思います。いくつかの行のみ行選択を無効にする - Primefaces

例:この場合

<p:dataTable var="foo" value="#{bean.foos}" selection="#{bean.selectedFoo}">` 
    <p:column selectionMode="single" />` 
    <p:column> 
     <h:outputText value="#{foo.bar}" /> 
    </p:column> 
<p:dataTable 

、私は列に関連付けられたラジオボタンを無効にする意味の行を無効にすることによって、foo.bar == 1,5,10行を無効にしたいと想像。

私はそれを達成する方法を理解できませんでした...どのようなアイデアですか? css + javascriptのハックソリューションでさえ受け入れられるでしょう。

ありがとうございます!

<script type="text/javascript" src="jquery.js"></script> 
     <script> 
     $(function(){ 
       $("#myform input[type = radio]:nth(1)").attr('disabled', 'disabled'); 
     }); 
</script> 

を次のように

+1

関連するラジオボタンに* disabled *属性を追加します。 – RobG

答えて

2

このリンクを確認してください way to disable row selection checkboxes。唯一の違いは、あなたのケースでは1つの選択であることですが、これは指定されたソリューションには影響しません。

0

あなたはjQueryを使って無効にしてみてくださいすることができあるmyForm:n番目のあなたのフォーム名 インプレース(1) あなたはdispbledされる行数を挙げることができます。

4

5.0バージョン以降、PrimefacesデータテーブルにはdisabledSelectionプロパティが付いています。

<p:dataTable var="foo" value="#{bean.foos}" selection="#{bean.selectedFoo}" disabledSelection="#{foo.bar == 1}"> 
    <p:column selectionMode="single" /> 
    <p:column> 
     <h:outputText value="#{foo.bar}" /> 
    </p:column> 
<p:dataTable> 

次に、foo.bar == 1がtrueの場合、チェックボックスは無効になります。

+0

元の質問は、この機能が提供する「すべての」行ではなく、「指定された行のセット」を無効にする方法を特に求めました。 – MichaelC

+3

すべての行を無効にするわけではなく、条件に一致する行のみを無効にします。ここでは、属性 "bar"が1に等しい行のみを無効にします。 – rvz

0

Beanプロパティに基づいて、選択した特定の行(単一または複数)だけを無効にしたい場合と同じ問題が発生しました。私の短い答えは、その行のラジオ/チェックボックスを非表示にして選択できないようにすることでした。私のニーズは、実行時に追加の選択を処理できるようにする必要がありました。これは、それ以降の処理で再処理されないように行が選択される前に行が物理的に選択されていないことを確認しなければならないことを意味したので、その状態に注意してください。

これは私がやっていることですが、今後この質問につきものになるかもしれません。

1)p:datatableで、rowStyleClass属性を追加し、Bean基準に基づいて、 'is-selectable'や 'not-selectable'などのクラスを提供しました。私のランタイムプロセスで

rowStyleClass="#{myBean.alreadyProcessedList.contains(item) ? 'not-selectable' : 'is-selectable'}" 

フォームを処理した後、再びレンダリングされた後、彼らは「選択可能ではない」行われることになるので、選択された行はこのリストに追加されました。最初のロードでは、選択できない行がすでにリストに追加されている必要があります。

2).not-selectableがラジオ/チェックボックスを非表示にするようにCSSを定義します。インラインスタイルを無効にするには、 '!important'を使用する必要がありました。

tr.not-selectable div.ui-radiobutton, 
tr.not-selectable div.ui-chkbox { 
    visibility: hidden !important; 
} 
関連する問題