在ap:tree上应使用什么事件来选择树节点并具有上下文菜单?

贾斯珀·德弗里斯

我正在使用上下文菜单创建PrimeFaces(5.3)树。选定的节点应存储在中#{myBean.selectedNode}当我使用鼠标左键选择一个节点时,将设置正确的节点。但是,当我尝试从上下文菜单上的节点上运行某个动作时,如果没有先选择它,就不会设置正确的节点(不会调用bean中的setter)。

我遵循PrimeFaces展示柜中示例如您所见,在PrimeFaces展示柜中,您可以立即右键单击一个节点,然后单击“查看”,并且咆哮声将显示正确的节点。

这是我的设置:

豆角,扁豆

是的ViewScoped,有一个private TreeNode selectedNode带有getter和setter的对象。

以下是有趣的部分:

public void onNodeSelect(NodeSelectEvent event) {
    MyTreeNode myTreeNode = (MyTreeNode) event.getTreeNode();
    myController.setSelected(myTreeNode.getEntity());
}

public void addChild(String name) {
    MyTreeNode myTreeNode = (MyTreeNode) selectedNode;
    MyTreeNode childNode = myTreeNode.addChild(name);
    myController.setSelected(childNode.getEntity());
    myController.insert();
}

XHTML

<h:form id="mainForm">
    <p:tree value="#{myBean.root}" var="node"
            id="myTree" dynamic="true"
            selectionMode="single" selection="#{myBean.selectedNode}">
        <p:treeNode expandedIcon="ui-icon-folder-open" collapsedIcon="ui-icon-folder-collapsed"
                    type="myType">
            <h:outputText value="#{node}"/>
        </p:treeNode>
        <p:ajax event="select" listener="#{myBean.onNodeSelect}" />
    </p:tree>

    <p:contextMenu for="myTree">
        <p:menuitem action="#{myBean.addChild('new')}"
                    value="Add"
                    process="@this"
                    update=":mainForm:myTree"/>
    </p:contextMenu>
</h:form>

通过替换PrimeFaces.widget.BaseTree.nodeRightClickJavaScript中函数以触发fireNodeSelectEvent右键单击,我能够解决此问题

PrimeFaces.widget.BaseTree.prototype.nodeRightClick = function(e, a) {
    PrimeFaces.clearSelection();
    if ($(e.target).is(":not(.ui-tree-toggler)")) {
        var d = a.parent(), b = a.hasClass("ui-tree-selectable");
        if (b && this.cfg.selectionMode) {
            var c = this.isNodeSelected(d);
            if (!c) {
                if (this.isCheckboxSelection()) {
                    this.toggleCheckboxNode(d)
                } else {
                    this.unselectAllNodes();
                    // Fixed right click selecting
                    // original code: this.selectNode(d, true)
                    this.selectNode(d); // <-- Fix
                }
            }
            this.fireContextMenuEvent(d)
        }
    }
}

对我来说,这似乎是一个错误,因此我在GitHub上创建了一个问题此问题已通过注释“请使用contextMenu事件”作为“无法解决”而关闭。

我已经检查了文档的tree和contextMenu部分两次。什么事件应该在哪里使用?在GitHub上了同样的问题,但没有任何回应。

库克尔特耶

阅读您报告问题,我调查了该代码(此代码开放的)。似乎p:tree有一些未记录的事件,contextMenu是其中一个(dragdrop另一个)。

5.3 java的源5.3的JavaScript源包含引用到一个contextMenu事件,所以

<p:ajax event="contextMenu" listener="#{myBean.onContextMenu}" />

public void onContextMenu(NodeSelectEvent event) {
    MyTreeNode myTreeNode = (MyTreeNode) event.getTreeNode();
    myController.setSelected(myTreeNode.getEntity());
}

将工作。请注意,没有,ContextMenuEvent但是它接受/需要NodeSelectEvent

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用C#在特定的树节点上启用和禁用上下文菜单项

来自分类Dev

使用具有不同项目的相同上下文菜单的ListBoxes,在ListBox Click事件上

来自分类Dev

如何在具有上下文菜单事件处理程序的组件上更改鼠标光标?

来自分类Dev

上下文菜单有多个选择器

来自分类Dev

具有上下文菜单的WPF按钮

来自分类Dev

具有上下文菜单的WPF按钮

来自分类Dev

WKWebView在cataylst上没有上下文菜单

来自分类Dev

为什么在桌面的上下文菜单上显示“使用代码打开”?

来自分类Dev

具有完整日历的上下文菜单,在日历和上下文菜单之间传递数据

来自分类Dev

上下文菜单中没有“使用IDLE编辑”

来自分类Dev

Android上下文问题-广播接收器(警报管理器)应使用什么上下文?

来自分类Dev

使上下文菜单事件特定于上拉菜单的部分

来自分类Dev

按钮上的上下文菜单长按?

来自分类Dev

按钮上的上下文菜单长按?

来自分类Dev

QGraphicsItemGroup qt上的上下文菜单

来自分类Dev

ListBoxItems 上的 WPF 上下文菜单

来自分类Dev

在上下文菜单中选择“在终端中打开”时,为什么没有源.profile?

来自分类Dev

PrimeFaces树-选择多个节点时显示不同的上下文菜单

来自分类Dev

具有使用SSL的上下文的UserPrincipal

来自分类Dev

jQuery上下文菜单,具有多个操作的单个菜单

来自分类Dev

使用Jquery上下文菜单

来自分类Dev

WebGL上下文使用节点

来自分类Dev

如何禁用右键单击事件或如何隐藏Autodesk Forge Viewer上的上下文菜单

来自分类Dev

彼此重叠的两个元素上的jQuery.bind上下文菜单事件

来自分类Dev

在上下文菜单操作上获取右键单击事件的位置

来自分类Dev

C# 如何在上下文子菜单上动态添加单击事件

来自分类Dev

有什么办法可以使用expo在本机上根据电话语言翻译上下文菜单?

来自分类Dev

iptables:具有规则的上下文

来自分类Dev

TinyMCE onPaste不会设置内容,使用上下文菜单粘贴不会触发更改事件

Related 相关文章

  1. 1

    如何使用C#在特定的树节点上启用和禁用上下文菜单项

  2. 2

    使用具有不同项目的相同上下文菜单的ListBoxes,在ListBox Click事件上

  3. 3

    如何在具有上下文菜单事件处理程序的组件上更改鼠标光标?

  4. 4

    上下文菜单有多个选择器

  5. 5

    具有上下文菜单的WPF按钮

  6. 6

    具有上下文菜单的WPF按钮

  7. 7

    WKWebView在cataylst上没有上下文菜单

  8. 8

    为什么在桌面的上下文菜单上显示“使用代码打开”?

  9. 9

    具有完整日历的上下文菜单,在日历和上下文菜单之间传递数据

  10. 10

    上下文菜单中没有“使用IDLE编辑”

  11. 11

    Android上下文问题-广播接收器(警报管理器)应使用什么上下文?

  12. 12

    使上下文菜单事件特定于上拉菜单的部分

  13. 13

    按钮上的上下文菜单长按?

  14. 14

    按钮上的上下文菜单长按?

  15. 15

    QGraphicsItemGroup qt上的上下文菜单

  16. 16

    ListBoxItems 上的 WPF 上下文菜单

  17. 17

    在上下文菜单中选择“在终端中打开”时,为什么没有源.profile?

  18. 18

    PrimeFaces树-选择多个节点时显示不同的上下文菜单

  19. 19

    具有使用SSL的上下文的UserPrincipal

  20. 20

    jQuery上下文菜单,具有多个操作的单个菜单

  21. 21

    使用Jquery上下文菜单

  22. 22

    WebGL上下文使用节点

  23. 23

    如何禁用右键单击事件或如何隐藏Autodesk Forge Viewer上的上下文菜单

  24. 24

    彼此重叠的两个元素上的jQuery.bind上下文菜单事件

  25. 25

    在上下文菜单操作上获取右键单击事件的位置

  26. 26

    C# 如何在上下文子菜单上动态添加单击事件

  27. 27

    有什么办法可以使用expo在本机上根据电话语言翻译上下文菜单?

  28. 28

    iptables:具有规则的上下文

  29. 29

    TinyMCE onPaste不会设置内容,使用上下文菜单粘贴不会触发更改事件

热门标签

归档