Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF+;使用Dynatree创建树表示_Jsf_Jsf 2_Facelets_Dynatree - Fatal编程技术网

JSF+;使用Dynatree创建树表示

JSF+;使用Dynatree创建树表示,jsf,jsf-2,facelets,dynatree,Jsf,Jsf 2,Facelets,Dynatree,我想画一棵在JSF中生成的树 我想我应该使用DynaTree并避免使用组件库,尽管我开始重新考虑解决方案的复杂性 我想我可以使用一个隐藏的输入将树的字符串表示形式传递给Javascript,然后在那里构建树 有没有我没有想到的更好的解决办法 使用JSF2.0,我最终做的是生成一个表示树的JSON字符串(dynatree格式),然后在另一端(浏览器)简单地使用JSON.Parse()生成一个树 有关守则如下: Java树节点: class GroupTreeNode { public get

我想画一棵在JSF中生成的树

我想我应该使用
DynaTree
并避免使用组件库,尽管我开始重新考虑解决方案的复杂性

我想我可以使用一个隐藏的输入将树的字符串表示形式传递给
Javascript
,然后在那里构建树

有没有我没有想到的更好的解决办法


使用JSF2.0,我最终做的是生成一个表示树的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("}");
}

我同意你的看法,dynatree是一个健壮且经验证的组件。与一些JSF本机树组件相反,这些组件具有较少的特性

我已经为dynatree启动了一个适配器。你可以在这里找到来源


欢迎评论

你能详细解释一下你的想法吗?事实上,jsf中有很多组件可以生成树,比如ApacheTomahawk树、icefaces树等等。感谢@Dmitry,我不想使用jsf组件库,因为我觉得它们给网络带来了沉重的负担,而且不能很好地处理jQuery。我所做的是生成一个表示树的JSON字符串(dynatree格式),然后在另一端(浏览器)简单地使用
JSON.Parse()
生成一个树。我一明白你的意思就写下来作为回答。组件的另一个缺点是,您通常对它们的控制较少。期待看到您的解决方案。
    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
    });