Primefaces 仅在p:dataTable中禁用少数行的行选择

Primefaces 仅在p:dataTable中禁用少数行的行选择,primefaces,primefaces-datatable,Primefaces,Primefaces Datatable,我想知道是否有一种方法可以基于bean属性禁用Primefaces中给定行集合的基于无线电的行选择 <p:dataTable var="foo" value="#{bean.foos}" selection="#{bean.selectedFoo}" disabledSelection="#{foo.bar == 1}"> <p:column selectionMode="single" /> <p:column> <h:

我想知道是否有一种方法可以基于bean属性禁用Primefaces中给定行集合的基于无线电的行选择

<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,5,10的行,通过禁用这些行,我的意思是禁用与该行关联的单选按钮


我想不出一个方法来实现这一点。。。有什么想法吗?即使是css+javascript黑客解决方案也可以接受。

您可以尝试使用Jquery禁用,如下所示

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

$(函数(){
$(“#myform input[type=radio]:n(1)”).attr('disabled','disabled');
});
myform:您的表单名称 代替第n(1)个
您可以提及要分配的行号。

自4.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
为真时,复选框将被禁用。

我遇到了同样的问题,我只想基于bean属性禁用选择中的某些行(单个或多个)。对我来说,简单的答案是只隐藏该行上的收音机/复选框,这样它就无法被选中。我的需求要求我能够在运行时处理其他选择。这意味着在进行任何进一步选择之前,我必须确保行在物理上未被选中,这样它们就不会在后续处理中被重新处理,所以要小心这种情况

以下是我所做的,为了将来可能会偶然发现这个问题的其他人

1) 在p:datatable中,我添加了rowStyleClass属性,并根据bean标准提供了一个类,例如:“可选择”或“不可选择”

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;
}
设置属性disabledSelection(为true时禁用行选择。重写 p:列的disabledSelection属性。示例: var=“xxx”disabledSelection=“#{xxx.year>
1960}"

将disabled属性添加到相关单选按钮。@您应该将标记的解决方案更新为第二个答案。PF5.0+@Melloware中的新PF disabledSelection属性感谢您指出了这一点!没有问题,谢谢修复!@Melloware
disabledSelection
实际上自PF4.0以来就存在了。原始问题问得具体一些此功能提供了一种禁用“给定行集”而不是“所有”行的方法。它不禁用所有行,只禁用与条件匹配的行。在这里,它只禁用属性“bar”所在的行等于1。如果我们想与字符串值进行比较,该怎么办?这已经在可接受的答案中…不需要额外的答案