树上的重复 ID(Primefaces 5.2 和 Liferay 6.2)

Duplicate ID on Tree (Primefaces 5.2 & Liferay 6.2)

我无法在 liferay 中使用 primefaces 树组件,我不明白为什么。 我尝试了很多 hack(范围,UiTreeNode/TreeNode,没有节点,...)但是当我 submit/refresh 我的页面(ajax 或非 ajax).

我没有其他想法所以我来找你...

xhtml :

<p:tree value="#{treeBasicView.root}" var="node">
    <p:treeNode>
        <h:outputText value="#{node}" />
    </p:treeNode>
</p:tree>

java :

@ManagedBean(name = "treeBasicView")
@ViewScoped
public class BasicView implements Serializable
{

    private TreeNode root;

    @PostConstruct
    public void init()
    {
        root = new DefaultTreeNode("Root", null);
        TreeNode node0 = new DefaultTreeNode("Node 0", root);
        TreeNode node1 = new DefaultTreeNode("Node 1", 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);

        node1.getChildren().add(new DefaultTreeNode("Node 1.1"));
        node00.getChildren().add(new DefaultTreeNode("Node 0.0.0"));
        node00.getChildren().add(new DefaultTreeNode("Node 0.0.1"));
        node01.getChildren().add(new DefaultTreeNode("Node 0.1.0"));
        node10.getChildren().add(new DefaultTreeNode("Node 1.0.0"));
        root.getChildren().add(new DefaultTreeNode("Node 2"));
    }

    public TreeNode getRoot()
    {
        return root;
    }
}

好的,我找到了。也许我可以帮助别人。

你要知道liferay bridge是通过Primefaces大版本认证的,不是Elite版本。但是补丁 5.2.4 更改了 UITree#visitTree 的实现,桥似乎无法处理此修改。我不知道为什么,但它不能。所以我覆盖了一些方法(visitTree/visitFacets/visitNodes)以忽略与访问节点相关的布尔值的改进(说实话,我不太明白)。 Aaaa 它有效! Q.E.D

https://www.liferay.com/fr/web/neil.griffin/blog/-/blogs/announcement-liferay-faces-4-x-3-x-2-x-ga6-released