【问题标题】:Accessing selected node of richfaces tree from Javascript从Javascript访问richfaces树的选定节点
【发布时间】:2011-02-21 06:11:06
【问题描述】:

这应该是一个非常简单的问题。我有一个使用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 函数?

【问题讨论】:

    标签: java javascript jsf tree richfaces


    【解决方案1】:

    我对 JSF 几乎没有经验,但 this(在您的事件处理程序的范围内)不应该像在 JavaScript 中通常那样引用所选节点吗?罢工>

    把你的函数改成这个并试一试:

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

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

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

    【讨论】:

    • 我也是这么想的!我已经试过了。 “This”指的是整个浏览器窗口,而不是选定的节点。
    • 您有测试页的公共 URL 吗?我对这些 Java/JSF-to-JavaScript 框架非常怀疑。可能是因为我不太了解它们,但是看看最终生成了什么样的 JS 代码会很有帮助。然后我们可以看到实际上是如何调用 documentClicked 的。
    • 好的,我很愚蠢,从你的代码中很明显 documentClicked 是如何被调用的。保留您的原始函数并在 onselected 中调用它,如下所示:documentClicked(this)。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 2011-01-09
      相关资源
      最近更新 更多