代码之家  ›  专栏  ›  技术社区  ›  kazanaki

从javascript访问RichFaces树的选定节点

  •  3
  • kazanaki  · 技术社区  · 14 年前

    这应该是一个非常简单的问题。我有一个使用JSF呈现的RichFaces树。当用户单击一个节点时,我希望运行一个javascript函数。再也没有了。没有重定向,没有重新提交,没有重新发送,没有Ajax。只是简单的老javascript。

    我见过 选定的 树的属性,它确实会激发一个javascript方法。但我当然想知道点击了哪个节点。

    这是我到目前为止所拥有的

    <head>
    <script type="text/javascript">
    function documentClicked(nodeRef)
    {
        alert("Node is "+nodeRef);
    }
    
    </script>
    </head>
    
    
        <rich:tree switchType="client" value="#{ajaxDocumentTree.rootNode}"  
            var="document" onselected="documentClicked()" >
    
    
    
            <rich:treeNode   iconLeaf="../images/tree/doc.gif"
                icon="../images/tree/doc.gif">
    
                <h:outputText value="#{document.friendlyName}" />
    
            </rich:treeNode>
    

    但这不起作用,因为noderef未定义。我期望回调的第一个参数是所选节点,但事实并非如此。

    所以问题是:

    如何使用RichFaces树中选定的节点启动javascript函数?

    2 回复  |  直到 14 年前
        1
  •  4
  •   kazanaki    14 年前

    答案是javascript代码应该在节点级别,而不是树级别。

    <head>
    <script type="text/javascript">
    function documentClicked(nodeRef)
    {
        alert("Node id is "+nodeRef);
    }
    
    </script>
    </head>
    
    
        <rich:tree switchType="client" value="#{ajaxDocumentTree.rootNode}"  
            var="document" >
    
            <rich:treeNode onclick="documentClicked('#{document.id}')">
    
                <h:outputText value="#{document.friendlyName}" />
    
            </rich:treeNode>
    
        2
  •  0
  •   Peter Jaric    14 年前

    我对JSF没有什么经验,但不应该 (在事件处理程序的范围内)引用所选节点,就像通常在javascript中那样?

    将您的功能更改为此并尝试:

    function documentClicked()
    {
        alert("Node is " + this);
    }
    

    编辑:以上显然不正确。根据我下面的评论,将您的JSF更改为

    <rich:tree switchType="client" value="#{ajaxDocumentTree.rootNode}"  
            var="document" onselected="documentClicked(this)" >