在选择时展开Primefaces树

时间:2017-11-22 07:10:58

标签: jsf primefaces

我正在使用Primefaces 6.1。树的创建工作正常,它也会在单击左侧的三角形时对树进行扩展做出反应。它还会在单击节点时触发事件。但是......我想在点击节点时展开树。我无法将其付诸实践。

这是树代码片段:

<p:tree id="tree"
        value="#{managedBeanFolder.root}"
        var="node"
        styleClass="tree-noborder"
        selectionMode="single">
    <p:ajax update=":folderListe:docListLatest" event="select" listener="#{managedBeanFolder.onNodeSelectListe}"/>
    <p:treeNode>
        <h:outputText value="#{node}" style="border:none" />
    </p:treeNode>
</p:tree>

我的ViewScoped ManagedBean看起来像这样

public void onNodeSelectListe(NodeSelectEvent event) {
    RequestContext context = RequestContext.getCurrentInstance();
    TreeNode selectedNode = (TreeNode) event.getTreeNode();
    if (selectedNode != null) {
        if (selectedNode.getChildCount() > 0) {
            if (selectedNode.isExpanded()) {
                selectedNode.setExpanded(false);
                context.update("folderListe:tree");
            } else {
                selectedNode.setExpanded(true);
                context.update("folderListe:tree");
            }
        }
    }
}

我已经检查过,代码已执行。当我通过单击三角形展开树时,selectedNode.isExpanded()为true,当我通过单击三角形折叠时,值为false。但该网站没有更新。

有什么问题? 非常感谢

2 个答案:

答案 0 :(得分:1)

您需要更新树:

<p:ajax update=":folderListe:docListLatest @this"

答案 1 :(得分:0)

我能够解决这个问题。通过更改JSF-part和托管bean。 这是我的JSF-Part:

<p:tree id="tree"
        value="#{managedBeanFolder.root}" 
        var="node" 
        style="border: none; width:300px; float: left; color: red; font-size: 102%;line-height: 1.847;" 
        styleClass="tree-noborder"          
        selectionMode="single"
        >                              
        <p:ajax update="folderListe:docListLatest, folderListe:tree" 
                event="select" 
                listener="#{managedBeanFolder.onNodeSelectListe}"   
                process="tree"/>                
       <p:treeNode>   
                <h:outputText value="#{node}" style="border: none" />
       </p:treeNode>
</p:tree>

我的表单的ID是'folderListe','docListLatest'是通过单击节点刷新的数据表。

在我的托管bean中,我有这个监听器:

public void onNodeSelectListe(NodeSelectEvent event) {
    RequestContext context = RequestContext.getCurrentInstance();
    TreeNode selectedNodeLocal = (TreeNode) event.getTreeNode();

    selectedNode = selectedNodeLocal;

    if (selectedNode != null) {
        if (selectedNode.getChildCount() > 0) {
            if (selectedNode.isExpanded()) {
                selectedNode.setExpanded(false);
                context.update("folderListe:tree");
            } else {
                selectedNode.setExpanded(true);
                context.update("folderListe:tree");
            }
        }
    }
    int folder = (int) folderIden.get(selectedNode.getRowKey());
    setFolderID(folder);
    setFolderName(selectedNode.toString());
    context.update("folderListe:docListLatest");        

    // application specific things to remember
    SharedObjects so = new SharedObjects();
    so.setFolderID(folder);
    getManagedBeanWebdokument().setFolderID(folderID);
    getManagedBeanWebdokument().setFolderName(getFolderName());

}

突然之间,它做了我想做的事情: - )