0

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

在此处输入图像描述

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

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

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

<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>

豆片段

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

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

4

1 回答 1

2

通过使用

<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:selectManyCheckbox中的每个p:rowexpansion都有自己的列表来支持本地选择

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

于 2019-09-27T09:40:20.827 回答