2011-06-18 47 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 hack解決方案也是可以接受的。

謝謝!

+1

將* disabled *屬性添加到相關的單選按鈕。 – RobG

回答

0

您可以嘗試使用jQuery禁用如下

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

myForm的:你的表單名稱 就地第n(1) 你可以提到要dispbled的行號。

4

從5.0版本開始,Primefaces datatable自帶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)定義CSS以使不可選項隱藏收音機/複選框。使用'!重要'是覆蓋內聯樣式的必要條件。

tr.not-selectable div.ui-radiobutton, 
tr.not-selectable div.ui-chkbox { 
    visibility: hidden !important; 
}