【问题标题】:p:selectmanycheckbox in p:datatable overrides selectionsp:datatable 中的 p:selectmanycheckbox 覆盖选择
【发布时间】:2020-01-27 13:59:49
【问题描述】:

第一张图片显示了数据表中两个复选框的选择。显示了两行数据表。在该行的第一个复选框中,您可以看到选择列表的括号。唯一的操作是选择复选框。而已。

现在,当我重新加载页面或单击底部的按钮时,状态会像第二张图片一样发生变化。

只有最后一行复选框的选择位于选择列表中。 所以我在想,如果选择列表及其托管 bean 有问题。

我在复选框上尝试了一个 changelistener,但我无法获得复选框的状态,选中或未选中。 于是我又把它删了。

<p:datatable>...
<p:rowExpansion>#{pathSearch.selectedSignalList1}
                    <p:selectManyCheckbox id="signalSel" value="#{pathSearch.selectedSignalList1}">
                        <p:ajax listener="#{pathSearch.changeSignalListener1}" />
                        <f:selectItems value="#{pathDistSel.availableSignalList}"
                            var="sig" itemValue="#{sig.label}___#{sig.idS}" itemLabel="#{sig.label}" />
                    </p:selectManyCheckbox>
                </p:rowExpansion>

豆sn-p

@ManagedBean
@SessionScoped
public class PathSearch implements Serializable {
private List<Signal> selectedSignalList1;
getter, setter...
}

如果有人有想法,我会很高兴,我的想法错误在哪里。也许你有这样的例子。

【问题讨论】:

    标签: primefaces datatable selectmanycheckbox


    【解决方案1】:

    通过使用

    <p:selectManyCheckbox id="signalSel" value="#{pathSearch.selectedSignalList1}">
         <p:ajax listener="#{pathSearch.changeSignalListener1}" />
         <f:selectItems value="#{pathDistSel.availableSignalList}"
             var="sig" itemValue="#{sig.label}___#{sig.idS}" itemLabel="#{sig.label}" />
    </p:selectManyCheckbox>
    

    在行扩展中,每一行中的选择列表指向相同属性selectedSignalList1。您需要在那里使用列表/数组,并将行索引作为键,或者使用哈希图和业务键。所以像

    <p:datatable ... rowIndex="signalIndex">
        <p:selectManyCheckbox id="signalSel" value="#{pathSearch.selectedSignalList[signalIndex]}">
             <p:ajax listener="#{pathSearch.changeSignalListener}" />
             <f:selectItems value="#{pathDistSel.availableSignalList}"
                 var="sig" itemValue="#{sig.label}___#{sig.idS}" itemLabel="#{sig.label}" />
        </p:selectManyCheckbox>
    </datatable>
    

    在豆子里

    @ManagedBean
    @SessionScoped
    public class PathSearch implements Serializable {
        private ArrayList<List<Signal>> selectedSignalList = new ArrayList<>();
        getter, setter...
    }
    

    这样,p:rowexpansion 中的每个p:selectManyCheckbox 都有自己的列表支持本地选择

    您在提交时执行的操作以及在需要加载提交的数据时如何聚合或恢复,例如从数据库中提取并在屏幕上显示由您来实现。

    【讨论】:

    • 好的,库克特杰是对的。非常感谢。有时它可以很容易。我发现,这个 value="#{pathSearch.selectedSignalList[signalIndex]}" List 必须用空 List 填充,否则会出现 IndexOutOfBoundsException。
    猜你喜欢
    • 2020-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 2012-10-31
    • 1970-01-01
    相关资源
    最近更新 更多