Search code examples
primefacesprimefaces-datatable

Disable row selection for a few rows only in a p:dataTable


I would like to know if there is a way of disabling the radio-based row selection for a given set of rows in Primefaces, based on a bean property.

Example:

<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>

In this case, imagine I would like to disable the rows where foo.bar == 1,5,10, by disabling the rows I mean disable the radio button associated with the row.

I couldn't figure out a way of accomplish that... any ideas? Even a css + javascript hack solution would be acceptable.


Solution

  • Since 4.0 version, Primefaces datatable comes with a disabledSelection property.

    <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>
    

    Then, when foo.bar == 1 is true, checkbox will be disabled.