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

22
我想知道是否有一种方法可以根据bean属性禁用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
@Redder,你应该将标记的解决方案更新为第二个答案,该答案介绍了PF5.0+中的新PF disabledSelection属性。 - Melloware
1
@Melloware 感谢您指出这个问题! - Redder
没问题,谢谢你修复! - Melloware
2
@Melloware,disabledSelection 自 PF4.0 就已经存在了。 - Jasper de Vries
4个回答

26

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


原始问题特别要求禁用“给定的一组行”,而不是“所有”行,这就是此功能提供的内容。 - MichaelC
7
它不会禁用所有行,而只会禁用符合条件的行。在这里,它只会禁用属性“bar”等于1的行。 - robinvrd
如果我们想要与字符串值进行比较,该怎么办? - Mdhar9e

1
我遇到了同样的问题,希望根据bean属性禁用某些行的选择(单个或多个)。对我来说,简短的答案就是隐藏该行的单选框/复选框,以便无法选择。我的需求要求我能够在运行时处理其他选择。这意味着在进行任何进一步的选择之前,必须确保该行(行)在物理上被取消选择,以便它们不会在后续处理中重新处理,因此请注意这种情况。
以下是我为其他可能在将来遇到这个问题的人所做的事情:
1) 在p:datatable中添加了rowStyleClass属性,并根据bean条件提供了一个类,例如:“is-selectable”或“not-selectable”。
rowStyleClass="#{myBean.alreadyProcessedList.contains(item) ? 'not-selectable' : 'is-selectable'}"

在我的运行过程中,选择的行被添加到此列表中,因此在处理后再次呈现表单时它们将变为“不可选择”。您的初始加载应已将不可选择的行添加到列表中,或通过您需要的任何条件进行处理。
2)定义CSS以使.not-selectable隐藏单选按钮/复选框。使用“!important”是必要的,以覆盖内联样式。
tr.not-selectable  div.ui-radiobutton,
tr.not-selectable  div.ui-chkbox {
    visibility: hidden !important;
}

0

您可以尝试使用Jquery禁用如下:

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

myform:您的表单名称 在nth(1)的位置 您可以指定要显示的行号。


-1

设置属性disabledSelection(当为true时禁用行选择。覆盖p:column的disabledSelection属性。例如:var="xxx" disabledSelection="#{xxx.year > 1960}")


2
这已经在接受的答案中了... 不需要额外的答案。 - Kukeltje

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接