p:datatable 中的 p:selectmanycheckbox 覆盖选择
p:selectmanycheckbox in p:datatable overrides selections
第一张图片显示了数据表中两个复选框的选择。显示的数据表有两行。在该行的第一个复选框中,您可以看到选择列表的括号。唯一的动作是选择复选框。而已。
现在,当我重新加载页面或单击底部的按钮时,状态会发生变化,如第二张图所示。
选择列表中只有最后一行复选框的选择。
所以我在想,是不是选择列表和它的managed 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>
Bean 片段
@ManagedBean
@SessionScoped
public class PathSearch implements Serializable {
private List<Signal> selectedSignalList1;
getter, setter...
}
如果有人有想法,我会很高兴,我的想法错误在哪里。也许你有这样的例子。
通过使用
<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
.您需要在那里使用 list/array 并将行索引作为键,或者使用散列图和业务键。所以像
<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>
并在 bean 中
@ManagedBean
@SessionScoped
public class PathSearch implements Serializable {
private ArrayList<List<Signal>> selectedSignalList = new ArrayList<>();
getter, setter...
}
这样,p:rowexpansion
中的每个 p:selectManyCheckbox
都有自己的支持本地选择的列表
你在提交时做了什么,以及当你需要加载提交的数据时如何聚合或恢复,例如从数据库中提取数据并将其显示在屏幕上由您来实现。
第一张图片显示了数据表中两个复选框的选择。显示的数据表有两行。在该行的第一个复选框中,您可以看到选择列表的括号。唯一的动作是选择复选框。而已。
现在,当我重新加载页面或单击底部的按钮时,状态会发生变化,如第二张图所示。
我在复选框上尝试了一个更改侦听器,但我无法获取复选框的状态,选中或未选中。 所以我又把它删除了。
<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>
Bean 片段
@ManagedBean
@SessionScoped
public class PathSearch implements Serializable {
private List<Signal> selectedSignalList1;
getter, setter...
}
如果有人有想法,我会很高兴,我的想法错误在哪里。也许你有这样的例子。
通过使用
<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
.您需要在那里使用 list/array 并将行索引作为键,或者使用散列图和业务键。所以像
<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>
并在 bean 中
@ManagedBean
@SessionScoped
public class PathSearch implements Serializable {
private ArrayList<List<Signal>> selectedSignalList = new ArrayList<>();
getter, setter...
}
这样,p:rowexpansion
中的每个 p:selectManyCheckbox
都有自己的支持本地选择的列表
你在提交时做了什么,以及当你需要加载提交的数据时如何聚合或恢复,例如从数据库中提取数据并将其显示在屏幕上由您来实现。