【发布时间】:2012-10-18 21:32:51
【问题描述】:
我正在使用带有树和复选框选择的 primefaces[3.4] 展示:
http://www.primefaces.org/showcase-labs/ui/treeSelectionCheckbox.jsf
是否可以附加一个 p:ajax 事件来点击节点的标签??
当用户点击树的节点标签时,我需要用子对象更新面板,而不一定是在用户选择它们时(点击复选框)。
提前致谢。
【问题讨论】:
标签: tree primefaces
我正在使用带有树和复选框选择的 primefaces[3.4] 展示:
http://www.primefaces.org/showcase-labs/ui/treeSelectionCheckbox.jsf
是否可以附加一个 p:ajax 事件来点击节点的标签??
当用户点击树的节点标签时,我需要用子对象更新面板,而不一定是在用户选择它们时(点击复选框)。
提前致谢。
【问题讨论】:
标签: tree primefaces
您永远不必调用服务器来执行显示/隐藏页面上其他元素这样简单的事情。 Primefaces 应该在这方面做得更好。同时,考虑一下这段 javascript 代码...
<p:treeNode type="parent" styleClass="parent">
<h:outputText value="#{myLabel}"/>
</p:treeNode>
...
<script>
jQuery(".parent > .ui-tree-selectable > .ui-treenode-label").each(function(){
var label = jQuery(this);
label.click(function(){
label.siblings(".ui-tree-toggler").click();
});
});
</script>
【讨论】:
这就是我解决此问题的方法,只需在 treeNode 模板中添加一个复选框并将 selectionMode 更改为 single。
<p:tree value="#{treeBean.root}" var="node" dynamic="true" cache="false"
selectionMode="single" selection="#{treeBean.selectedNode}" id="tree">
<p:ajax event="select" update=":form:messages" listener="#{treeBean.onNodeSelect}" />
<p:treeNode>
<p:selectBooleanCheckbox id="treeCheck" value="#{node.selected}"/>
<h:outputText value="#{node.name}" />
</p:treeNode>
</p:tree>
考虑到您必须手动编写逻辑代码以检查/取消选中父/子节点。
谢谢。
【讨论】:
onNodeSelect 看起来如何?是否使用NodeSelectEvent 类型的参数?
treeCheck 的 bean 中获取所有选中的复选框
p:tree 元素能够处理 4 个事件:
选择事件就是你想要的。
编辑:这在树中使用复选框时不起作用。
【讨论】:
select 事件仅在 (a) 选择模式为 `single 或 (b) 在复选框模式下单击复选框而不是节点(例如文本)时起作用。所以这行不通