我正在使用 PF 3.4 和 JSF2。(我更改了展示示例以展示我正在尝试做的事情。)
xhtml 文件(带有第二种形式的额外命令按钮):
<h:form id="form">
<p:growl id="messages" showDetail="true" escape="false"/>
<p:tree value="#{treeBean.root}" var="node"
selectionMode="checkbox" selection="#{treeBean.selectedNodes}" id="treeMultiple">
<p:treeNode>
<h:outputText value="#{node}" />
</p:treeNode>
</p:tree>
<p:commandButton value="Display Selected" update="messages"
actionListener="#{treeBean.displaySelectedMultiple}" id="btnDisplay" />
</h:form>
<h:form id="form2">
<p:commandButton value="Display Selected"
process=":form:treeMultiple"
actionListener="#{treeBean.displaySelectedMultiple}" id="btnDisplay2" />
</h:form>
支持豆:
public class TreeBean implements Serializable {
private TreeNode root;
private TreeNode[] selectedNodes;
public TreeBean() {
root = new DefaultTreeNode("Root", null);
TreeNode node0 = new DefaultTreeNode("Node 0", root);
TreeNode node1 = new DefaultTreeNode("Node 1", root);
TreeNode node2 = new DefaultTreeNode("Node 2", root);
TreeNode node00 = new DefaultTreeNode("Node 0.0", node0);
TreeNode node01 = new DefaultTreeNode("Node 0.1", node0);
TreeNode node10 = new DefaultTreeNode("Node 1.0", node1);
TreeNode node11 = new DefaultTreeNode("Node 1.1", node1);
TreeNode node000 = new DefaultTreeNode("Node 0.0.0", node00);
TreeNode node001 = new DefaultTreeNode("Node 0.0.1", node00);
TreeNode node010 = new DefaultTreeNode("Node 0.1.0", node01);
TreeNode node100 = new DefaultTreeNode("Node 1.0.0", node10);
}
public TreeNode getRoot() {
return root;
}
public TreeNode[] getSelectedNodes() {
return selectedNodes;
}
public void setSelectedNodes(TreeNode[] selectedNodes) {
this.selectedNodes = selectedNodes;
}
public void displaySelectedMultiple(ActionEvent event) {
if(selectedNodes != null && selectedNodes.length > 0) {
StringBuilder builder = new StringBuilder();
for(TreeNode node : selectedNodes) {
builder.append(node.getData().toString());
builder.append("<br />");
}
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selected", builder.toString());
FacesContext.getCurrentInstance().addMessage(null, message);
}
}
}
我遇到的问题是支持 bean 中的 setSelectedNodes 方法。
commandButton :form2:btnDisplay2 将调用该方法,但是,它传递一个 TreeNode[0] 值(空数组)。它没有正确传递选定的节点。
第一个按钮 :form:btnDisplay 可以正常工作。
附加信息: 在我的应用程序中,我在左侧导航区域 (form1) 中有“过滤器”:日期范围和各种缩小搜索范围的标准 - 这些都是可选的。其中一些标准在 ap:tree 组件中。我目前有一个该表单中的“应用过滤器”按钮,该按钮有效:p:tree 选择正确地传递给支持 bean。
在主要内容区域 (form2) 中,我有所需的选择标准 (account#) 和“搜索”按钮。问题是用户忘记单击form1 中的“应用过滤器”按钮。他们在 p:tree 中设置日期范围和复选框(在 form1 中),然后单击 form2 上的“搜索”按钮。
所以,从form2,我试图从form1处理p:tree。