p:来自另一种形式的树setSelectedNodes

时间:2013-04-24 16:29:52

标签: jsf-2 primefaces

我正在使用PF 3.4和JSF2。 (我改变了展示示例来演示我正在尝试做什么。)

xhtml文件(在第二种形式中使用额外的commandButton):

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

支持Bean:

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)中有“过滤器”:日期范围,以及缩小搜索范围的各种标准 - 这些都是可选的。其中一些标准位于p:tree组件中。我目前在该表单中有一个“应用过滤器”按钮,它起作用:p:树选择正确地传递给辅助bean。

在主要内容区域(form2)中,我有所需的选择标准(帐号#)和“搜索”按钮。问题是用户忘记单击form1中的“应用过滤器”按钮。他们在p:树中设置了日期范围和复选框(在form1中),然后单击form2上的“SEARCH”按钮。

所以,从form2开始,我正在尝试从form1处理p:tree。

0 个答案:

没有答案