禁用几行的行选择 - Primefaces

时间:2011-06-18 11:15:54

标签: jsf primefaces

我想知道是否有一种方法可以根据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解决方案也是可以接受的。

谢谢!

5 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:1)

点击此链接 way to disable row selection checkboxes。唯一的区别是,在您的情况下,它是一个选择,但这不会影响给定的解决方案。

答案 2 :(得分:0)

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

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

myform:您的表单名称 取代第n(1) 你可以提一下要显示的行号。

答案 3 :(得分:0)

我遇到了同样的问题,我想根据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;
}

答案 4 :(得分:-1)

设置属性 disabledSelection (如果为true,则禁用行选择。替代 p:列的disableSelection属性。例: var =“ xxx” disabledSelection =“#{xxx.year> 1960}“