Tree的问题,tree的数据加载不了,不知道是什么原因,高手们请帮我看看!

ZMFKPLJ 2008-09-10 12:01:32
只是显示"目录树根节点",但是节点数据能正确的从后台取出,就是不能在树上显示出来?
搞了半天了,不能为什么????


代码如下

jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ include file="/common/taglibs.jsp"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>login</title>

<link rel="stylesheet" type="text/css" href="styles/ext/ext-all.css">
<script type="text/javascript" src="scripts/ext/ext-base.js"></script>
<script type="text/javascript" src="scripts/ext/ext-all.js"></script>
<script>

Ext.onReady(function(){

var Tree = Ext.tree;

//定义根节点的Loader
var treeloader=new Tree.TreeLoader({dataUrl:'/listSort?parentId=0&purpose=1'});

//异步加载根节点
var rootnode=new Tree.AsyncTreeNode({
id:'1',
text:'目录树根节点'
});

var treepanel = new Tree.TreePanel({
//renderTo:"tree_div",//如果使用renderTo,则不能使用setRootNode()方法,需要在TreePanel中设置root属性。
el:'tree_div', //填充区域
rootVisible:true, //隐藏根节点
border:true, //边框
animate:true, //动画效果
autoScroll:true, //自动滚动
enableDD:false, //拖拽节点
containerScroll:true,
loader:treeloader
});

//设置根节点
treepanel.setRootNode(rootnode);

//响应事件,传递node参数
treepanel.on('beforeload',
function(node){
treepanel.loader.dataUrl='/listSort?parentId=0&purpose=1'+node.id; //定义子节点的Loader
});

treepanel.render();
rootnode.expand(false,false);
});

</script>

</head>

<body>

<div id="tree_div" style="height:101%;width:100%"></div>

</body>
</html>



取节点的servlet中的方法
这里的数据是能正确返回为json格式化数据的


public void list(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {

Integer purpose=null;
if(request.getParameter("purpose")!=null && !"".equals(request.getParameter("purpose"))){
purpose=Integer.parseInt(request.getParameter("purpose"));

request.setAttribute("purpose", purpose);
}

Integer parentId=null;
if(request.getParameter("parentId")!=null && !"".equals(request.getParameter("parentId"))){
parentId=Integer.parseInt(request.getParameter("parentId"));

request.setAttribute("parentId", parentId);
}

List<SortBean> listSort=sortService.listSortByParentId(purpose, parentId);
List<TreeNode> listTree=null;

if(listSort!=null && listSort.size()>0){

listTree=new ArrayList<TreeNode>();
TreeNode tree=null;


//将从数据库中取的数据转换为TreeNode
for(SortBean sort : listSort){
tree=new TreeNode();

tree.setId(sort.getId().toString());
tree.setText(sort.getName());

List<SortBean> list2=sortService.listSortByParentId(sort.getPurpose(), sort.getId());
tree.setLeaf(list2.size()>0?true:false);
tree.setExpandable(false);

listTree.add(tree);
}
}

JSONArray jsonArray =null;

if(listTree!=null){
boolean scriptTag = false;
String cb = request.getParameter("callback");
if (cb != null) {
scriptTag = true;
}

response.setContentType("text/x-json;charset=UTF-8");
Writer out;

try {
out = response.getWriter();

jsonArray = JSONArray.fromObject(listTree);

if (scriptTag) {
out.write(cb + "(");
}
JSONObject jsobjcet = new JSONObject();

jsobjcet.put("totalCounts", listTree.size());

jsobjcet.put("root", jsonArray);

response.getWriter().print(jsonArray);
// out.write(jsobjcet.toString());

System.out.println(jsobjcet.toString());

out.write("{\"recordCount\":\"" +listTree.size()+ "\",\"datalist\":"+ jsonArray.toString()+ "}");
if (scriptTag) {
out.write(");");
}

//JSONArray JsonArray = JSONArray.fromObject(TreeNodeArray); //�õ�JSON����


} catch (IOException e) {
e.printStackTrace();
}
}

//return jsonArray;

}



用的两个Bean

SortBean.java
public class SortBean implements Serializable{


private static final long serialVersionUID = 5882317401560085117L;

private Integer id;

private String name;

private Integer parentId;

private Integer purpose;


public Integer getPurpose() {
return purpose;
}

get,set方法略...



}


TreeNode.java
public class TreeNode implements Serializable{

private static final long serialVersionUID = 1L;

public static void main(String[] args) {

}

private String id; //ID
private String text; //节点显示
private String cls; //图标
private boolean leaf; //是否叶子
private String href; //链接
private String hrefTarget; //链接指向
private boolean expandable; //是否展开
private String description; //描述信息

//get、set方法。略。

}
}
...全文
535 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjfmail 2008-09-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wjfmail 的回复:]
做了测试,是不能显示。是你生成的JSON串,看起来是正确的。但他不合extjs的要求多了其他的格式字符。
我用vs2005的两种方式把树显示出来了。不知道对你的JAVA有没有帮助。因为文章写得有点长;所以就没贴出来了。你可以看我的博客。请多指教。
http://blog.csdn.net/wjfmail/archive/2008/09/17/2940513.aspx。
我的实现是在.net的环境。

互相学习。
[/Quote]

补充:我用的是和你一样的HTML和JS 文件。只是我的dataUrl指向跟你的不一样。
wjfmail 2008-09-17
  • 打赏
  • 举报
回复
做了测试,是不能显示。是你生成的JSON串,看起来是正确的。但他不合extjs的要求多了其他的格式字符。
我用vs2005的两种方式把树显示出来了。不知道对你的JAVA有没有帮助。因为文章写得有点长;所以就没贴出来了。你可以看我的博客。请多指教。
http://blog.csdn.net/wjfmail/archive/2008/09/17/2940513.aspx。
我的实现是在.net的环境。

互相学习。
wjfmail 2008-09-16
  • 打赏
  • 举报
回复
继续关注。
qintao1203 2008-09-12
  • 打赏
  • 举报
回复
看了,应该是你的后台组成的json数据问题!Ext的tree不会自动解析root:{...}的root后面你给的tree的格式字段的!
{"id":1,"text":"管理中心","qtip":"null","cls":"folder","children":[{"id":2,"text":"试验地","hrefTarget":"content-target","href":"form.jsp","qtip":"2","cls":"file","leaf": true}]}
json应该构建成这样!


wjfmail 2008-09-12
  • 打赏
  • 举报
回复
1. 能否把取得的 JSON串,贴出来,看看就知道了.

2. 可以先把 rootnode.expand(false,false);
改为: rootnode.expand(true,true);
如果JSON 串;正确的话.应该都能打开,并显示.

互相学习!!!
zqcen 2008-09-11
  • 打赏
  • 举报
回复
UP
ZMFKPLJ 2008-09-10
  • 打赏
  • 举报
回复
没有人知道呀
cg2003 2008-09-10
  • 打赏
  • 举报
回复
UP

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧