hel*_*123 5 jsf primefaces treetable
我有一个PrimeFaces树表,想添加一个复选框,允许用户选择/取消选择所有复选框。
这是我的xhtml的摘录
<p:selectBooleanCheckbox
itemLabel="Select all"
value="#{mainViewBean.selectAll}">
<p:ajax listener="#{mainViewBean.onSelectAll}"
update="@this :mainForm" />
</p:selectBooleanCheckbox>
<p:treeTable id="treeToAssign"
value="#{mainViewBean.treeValue}" var="vh"
selectionMode="checkbox"
selection="#{mainViewBean.treeSelection}">
<f:facet name="header">
Tree Table
</f:facet>
<p:column>
<h:outputText value="#{vh.name}" />
</p:column>
</p:treeTable>
Run Code Online (Sandbox Code Playgroud)
这是我的bean方法
private TreeNode treeValue;
private TreeNode[] treeSelection;
private boolean selectAll;
public void onSelectAll() {
List<TreeNode> selection = new ArrayList<>();
for (TreeNode node : treeValue.getChildren()) {
node.setSelected(selectAll);
selection.add(node);
}
treeSelection = selection.toArray(new TreeNode[selection.size()]);
}
Run Code Online (Sandbox Code Playgroud)
我起初只是尝试设置NODE.setSelected(selectAll);
,但没有用,所以我也尝试手动填充treeSelection
。
我觉得这应该很简单,但是一直无法弄清楚,有什么建议吗?
谢谢
基本上,PrimeFaces 使用 treeTable 中的术语节点来引用每一行,它提供了一个 JavaScript 函数PrimeFaces.widget.TreeTable.selectNodesInRange(node)用于选择另一个节点范围内的所有节点,以及另一个取消选择所有节点的函数节点PrimeFaces.widget.TreeTable.unselectAllNodes()。
因此,具有以下功能(用于选择全部,不需要用于取消选择,它已经存在):
function selectAllInTreeTable(widgetVar) {
widgetVar.tbody.find('tr').each(function() {
widgetVar.selectNodesInRange($(this));
});
}
Run Code Online (Sandbox Code Playgroud)
假设您的widgetVar
treeTable 是treeTableWV
,并将 selectAll booleanCheckbox 调整为:
<p:selectBooleanCheckbox widgetVar="selectAllCheckBox" onchange="PF('selectAllCheckBox').isChecked()?PF('treeTableWV').unselectAllNodes():selectAllInTreeTable(PF('treeTableWV'))" >
...
</p:selectBooleanCheckbox>
Run Code Online (Sandbox Code Playgroud)
会做的。
归档时间: |
|
查看次数: |
2681 次 |
最近记录: |