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

时间:2015-11-04 10:30:37

标签: primefaces liferay jboss-eap-6

我不能在liferay中使用primefaces树组件,我不明白为什么。 我尝试了很多hack(范围,UiTreeNode / TreeNode,没有节点,......)但是当我提交/刷新我的页面(ajax或非ajax)时,我总是有一个重复的Id。

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

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

1 个答案:

答案 0 :(得分:0)

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

您必须知道liferay bridge已获得Primefaces主要版本的认证,而不是Elite版本。但补丁5.2.4改变了UITree#visitTree的实现,似乎桥接器无法处理这种修改。我不知道为什么,但它不能。所以我重写了一些方法(visitTree / visitFacets / visitNodes),以忽略与访问节点相关的布尔值的改进(说实话,我真的不明白)。 Aaaaand它的作品! Q.E.D

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