从Javascript访问richfaces树的选定节点

时间:2010-05-19 07:27:56

标签: java javascript jsf tree richfaces

这应该是一个非常简单的问题。我有一个使用JSF渲染的richfaces树。当用户点击某个节点时,我希望运行一个javascript函数。更不用说了。没有重定向,没有重新提交,没有重新呈现,没有Ajax。只是简单的旧Javascript。

我已经看到了树的 onselected 属性,它确实触发了一个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 个答案:

答案 0 :(得分:4)

答案是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>

答案 1 :(得分:0)

我对JSF没什么经验,但不应该这个(在你的事件处理程序范围内)引用所选择的节点,就像在JavaScript中一样?

<击>

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

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

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

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