JSF+;使用Dynatree创建树表示
我想画一棵在JSF中生成的树 我想我应该使用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
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
});