JSF + Dynatree для представления дерева - PullRequest
0 голосов
/ 30 августа 2011

Я хотел бы нарисовать дерево, которое генерируется в JSF.

Я подумал, что буду использовать DynaTree и не буду использовать библиотеки компонентов, хотя у меня возникают мысли о сложности решения.

Я думал, что смогу передать строковое представление дерева, используя скрытый ввод, в Javascript и затем построить дерево там.

Есть ли лучшее решение, о котором я не думал?

Использование JSF2.0

Ответы [ 2 ]

1 голос
/ 01 сентября 2011

В конечном итоге я создал строку JSON, представляющую дерево (в формате dynatree), а затем просто использовал JSON.Parse () на другой стороне (в браузере), чтобы сделать из него дерево.

Соответствующий код: Узел дерева Java:

class GroupTreeNode {
   public getNodes();
   public getGroupId();
   public getName();
}

Генерация строки дерева:

public String generateTreeString()
{
    GroupTreeNode[] root = getGroupTreeBean()
            .getGroupsTreeRoot("groupTree");

    StringBuilder sb = new StringBuilder();

    sb.append("[");

    for (int i = 0; i < root.length; i++)
    {
        genSubTree(root[i], sb);
    }

    sb.append("]");

    return sb.toString();
}

private void genSubTree(GroupTreeNode node, StringBuilder sb)
{
    // Check if the last character is a '}' in which case we need to add a comma
    char[] chararray = new char[1];
    sb.getChars(sb.length()-1, sb.length(), chararray, 0);
    if (chararray[0] == '}') {
        sb.append(", ");
    }

    // Carry on...
    sb.append("{");

    // Group Name
    sb.append("\"title\":\"");
    sb.append(node.getName());
    sb.append("\", ");

    // Group ID (Custom Node Tab)
    sb.append("\"groupID\":\"");
    sb.append(node.getGroupId());
    sb.append("\"");

    // Children (Only if applicable)
    if (node.getNodes().length > 0) {
        sb.append(", \"isFolder\":true, \"children\":[");
        for (int i =0; i < node.getNodes().length; i++)
        {
            genSubTree(node.getNodes()[i], sb);             
        }

        sb.append("]");
    }

    sb.append("}");
}

Строка передается через JSF в <h:inputText id="tree" style="display:none" />, а затем JavaScript разбор:

    function buildTree(sTree) {
        var builtobj = JSON.parse(sTree);
        return builtobj;
    }


    var jsfString = $("#tree").val();
    console.log("Building a tree with:" + jsfString);

    $("#fleet_tab_tree").dynatree({
        onActivate : function (node) {
            console.log("You activated " + node.data.title + ", with groupID=" + node.data.groupID);
            // Do whatever you want with the node values
        },
        persist : true,
        children : buildTree(jsfString),
        clickFolderMode: 1
    });
0 голосов
/ 13 июля 2012

Я согласен с вами, чем Dynatree является надежным и проверенным компонентом.В отличие от некоторых компонентов собственного дерева JSF, которые имеют меньше функций.

Я запустил адаптер для dynatree.Вы можете найти источник здесь https://github.com/nithril/dynatree-for-jsf

Комментарии приветствуются!

...