关于Extjs Tree 与struts2 值接收问题

zhao9302 2010-01-31 05:35:24
大哥大姐们,请问下 extjs与struts2 json应用中值如何传递

看我的做法:


import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONArray;

import com.entity.Menu;

public class MenuTreeAction extends ActionSupport
{


List<Menu>menus = new ArrayList<Menu>();

String menusString ;

public String execute()
{
Menu benz = new Menu();
benz.setText("Benz");
benz.setCls("folder");
benz.setLeaf(false);
benz.setId(10);
menus.add(benz);

List<Menu> benzList = new ArrayList<Menu>();
benz.setChildNodes(benzList);

Menu menu;
menu = new Menu();
menu.setText("S600");
menu.setCls("file");
menu.setLeaf(true);
menu.setId(11);

benzList.add(menu);
menu = new Menu();
menu.setText("SLK200");
menu.setCls("file");
menu.setLeaf(true);
menu.setId(12);
benzList.add(menu);

Menu bmw = new Menu();
bmw.setText("BMW");
bmw.setCls("folder");
bmw.setLeaf(false);
bmw.setId(20);
menus.add(bmw);

List<Menu> bmwList = new ArrayList<Menu>();
bmw.setChildNodes(bmwList);

menu = new Menu();
menu.setText("325i");
menu.setCls("file");
menu.setLeaf(true);
menu.setId(21);
bmwList.add(menu);

menu = new Menu();
menu.setText("X5");
menu.setCls("file");
menu.setLeaf(true);
menu.setId(22);
bmwList.add(menu);


JSONArray jsonObject = JSONArray.fromObject(menus);
try {
menusString = jsonObject.toString();
} catch (Exception e) {
menusString = "ss";
}


return SUCCESS;
}

public String getMenusString()
{
return menusString;
}

public void setMenusString(String menusString)
{
this.menusString = menusString;
}

public List<Menu> getMenus()
{
return menus;
}

public void setMenus(List<Menu> menus)
{
this.menus = menus;
}

}



Struts配置文件

<action name="menuTree" class="com.action.MenuTreeAction">
<result>/frame.jsp</result>
</action>


frame是加载框架的页面

而我的树的js:



Ext.onReady(function() {
Ext.QuickTips.init();
var root = new Ext.tree.AsyncTreeNode({
id : "root",
text : '控制面板',
expanded : true
});


var tree = new Ext.tree.TreePanel({
renderTo : 'show',
root : root,// 定位到根节点
animate : true,// 开启动画效果
enableDD : false,// 不允许子节点拖动
enableDrag : true,
autoScroll : true,
autoHeight : true,
border : false,// 没有边框
rootVisible : true,// 设为false将隐藏根节点,很多情况下,我们选择隐藏根节点增加美观性

loader : new Ext.tree.TreeLoader({
dataUrl : "http://localhost:8080/TestProject/menuTree"
})
})

// root.appendChild(node1);
// root.appendChild(node2);
// node1.appendChild(node3);

tree.render();
});



为什么树一直不能正常的加载呢?
其中JSON数据是正常的

[{"childNodes":[{"childNodes":[],"text":"S600","cls":"file","leaf":true,"id":11},{"childNodes":[],"text":"SLK200","cls":"file","leaf":true,"id":12}],"text":"Benz","cls":"folder","leaf":false,"id":10},{"childNodes":[{"childNodes":[],"text":"325i","cls":"file","leaf":true,"id":21},{"childNodes":[],"text":"X5","cls":"file","leaf":true,"id":22}],"text":"BMW","cls":"folder","leaf":false,"id":20}]

这个应该是没有错误的
...全文
632 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ranspket2 2010-10-09
  • 打赏
  • 举报
回复
你的menuString并没有传到客户端,所以需要把menustring在客户端显示,而你的js中需要的是JSON对象。
zhao9302 2010-02-02
  • 打赏
  • 举报
回复
在顶下
zhao9302 2010-02-01
  • 打赏
  • 举报
回复
自己顶一下
zhao9302 2010-02-01
  • 打赏
  • 举报
回复
呵呵 多谢前辈
不过又有了新的问题,我生成的树貌似在不停的迭代,迭代的节点也就是最初生成的节点

就是
这个样子

控制面板
Benz
Benz
benz
benz
bmw
benz
bmw
benz
bmw
bmw
bmw

不停的循环,这是怎么回事



hoojo 2010-01-31
  • 打赏
  • 举报
回复
你的frame.jsp要把menusString显示出了,现实出来后是一段json的字符串了。
然后你会在客户端也就是js脚本中,可以获得这段json的字符串,注意它是字符串
但是这段字符串是否正常列,你可以用eval()进行转换,看看是否正确,如果能
正常的转换说明是对的,如果不能就错了。
你可以这样
JSONArray jsonObject = JSONArray.fromObject(menus);
try {
menusString = jsonObject.toString();
} catch (Exception e) {
menusString = "ss";
}
PrintWrite out = ServletActionContext.getResponse().getWrite();

out.print(menusString);这样就可以了
return null;
}

52,787

社区成员

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

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