В конечном итоге я создал строку 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
});