问题描述
|
我想知道是否有一种方法可以基于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解决方案也是可以接受的。
解决方法
从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
为true时,此复选框将被禁用。
, 选中此链接方式可禁用行选择复选框。唯一的区别是,在您的情况下,它是单个选择,但这不会影响给定的解决方案。
, 您可以尝试使用Jquery禁用,如下所示
<script type=\"text/javascript\" src=\"jquery.js\"></script>
<script>
$(function(){
$(\"#myform input[type = radio]:nth(1)\").attr(\'disabled\',\'disabled\');
});
</script>
myform:您的表单名称
代替nth(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;
}