Ich bin auf dasselbe Problem gestoßen, bei dem ich nur bestimmte Zeilen von der Auswahl ausschließen wollte (eine oder mehrere), basierend auf einer Bean-Eigenschaft. Die kurze Antwort für mich war, einfach das Optionsfeld in dieser Zeile auszublenden, damit es nicht ausgewählt werden konnte. Für meine Bedürfnisse musste ich in der Lage sein, zusätzliche Auswahlen zur Laufzeit zu verarbeiten. Das bedeutete, dass ich sicher sein musste, dass die Zeile(n) physisch abgewählt waren, bevor weitere Auswahlen getroffen wurden, damit sie bei der nachfolgenden Verarbeitung nicht erneut verarbeitet wurden; achten Sie also auf diese Bedingung.
Für andere, die in Zukunft vielleicht über diese Frage stolpern, habe ich Folgendes getan.
1) In der p:datatable fügte ich das Attribut rowStyleClass hinzu und gab auf der Grundlage der Bean-Kriterien eine Klasse an, z. B: 'is-selectable' oder 'not-selectable'.
rowStyleClass="#{myBean.alreadyProcessedList.contains(item) ? 'not-selectable' : 'is-selectable'}"
In meinem Laufzeitprozess wurden ausgewählte Zeilen zu dieser Liste hinzugefügt, damit sie "nicht auswählbar" sind, sobald das Formular nach der Verarbeitung erneut gerendert wird. Beim anfänglichen Laden sollten die nicht auswählbaren Zeilen bereits zur Liste hinzugefügt worden sein, oder sie sollten durch die Bedingung, die Sie in Ihrem Fall benötigen, behandelt werden.
2) Definieren Sie CSS, um das Radio/Kontrollkästchen mit .not-selectable auszublenden. Die Verwendung von '!important' war notwendig, um das Inline-Styling außer Kraft zu setzen.
tr.not-selectable div.ui-radiobutton,
tr.not-selectable div.ui-chkbox {
visibility: hidden !important;
}