Доступ к выбранному узлу дерева richfaces из Javascript - PullRequest
3 голосов
/ 19 мая 2010

Это должен быть очень простой вопрос. У меня есть дерево richfaces, которое отображается с использованием JSF. Когда пользователь нажимает на узел, я хочу, чтобы выполнялась функция 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 не определен. Я ожидал, что первым аргументом обратного вызова будет выбранный узел, но это не так.

Итак, вопрос такой:

Как запустить функцию Javascript с выбранным узлом из дерева richfaces?

Ответы [ 2 ]

4 голосов
/ 20 мая 2010

Ответ заключается в том, что код 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>
0 голосов
/ 19 мая 2010

У меня небольшой опыт работы с JSF, но не должен ли этот (в контексте вашего обработчика событий) ссылаться на выбранный узел, как это обычно происходит в JavaScript?

Измените свою функцию на эту и попробуйте:

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

РЕДАКТИРОВАТЬ: выше было явно не правильно. Согласно моему комментарию ниже, измените свой JSF на

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