19

我想知道是否有一种方法可以基于 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>

在这种情况下,假设我想禁用 where 的行foo.bar == 1,5,10,通过禁用行我的意思是禁用与该行关联的单选按钮。

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

4

4 回答 4

23

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

于 2017-09-26T12:29:25.073 回答
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;
}
于 2017-10-19T21:58:25.163 回答
0

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

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

myform:your Form Name Inplace of nth(1) 您可以提及要显示的行号。

于 2011-06-20T06:40:45.107 回答
-1

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

于 2020-05-19T10:11:41.657 回答