Struts2响应json的问题

publicStringexecute(){Stringjson="";if("0".equals(node)){json+="[{id:1,text:'节点1'},{i... public String execute() {
String json = "";
if ("0".equals(node)) {
json += "[{id:1,text:'节点1'},{id:2,text:'节点2'}]";
} else if ("1".equals(node)) {
json += "[{id:11,text:'节点11'},{id:12,text:'节点12'}]";
} else if ("2".equals(node)) {
json += "[{id:21,text:'节点21'},{id:22,text:'节点22'}]";
} else if ("11".equals(node)) {
json += "[{id:111,text:'节点111'},{id:112,text:'节点阿112'}]";
}
map.put("json", json);
System.out.println(node);
return "success";
}
-----------------------------------------------------------------------------------------------
<action name="getJson" class="com.action.TreeAction1">
<result type="json">
<param name="root">map</param>
</result>
</action>
----------------------------------------------------------------------------------------------
响应后的json数据不能在ext的树结构显示
Ext.onReady(function(){
var tree = new Ext.tree.TreePanel({
el: 'tree',
loader: new Ext.tree.TreeLoader({dataUrl:'getJson.action',method:'POST'}),
root:'json'
});
var root = new Ext.tree.AsyncTreeNode({
id: '0',
text:'我是根'
});
tree.setRootNode(root);
tree.render();
root.expand(false, false);
});
展开
 我来答
鼻涕一米二
2012-07-20 · TA获得超过816个赞
知道小有建树答主
回答量:460
采纳率:100%
帮助的人:265万
展开全部
很简单的,你用response流输出可以正常显示,因为你返回的json串
满足exttree需要的json数据格式:[{},{}]
而你用struts的json-plugin返回map的话,将返回map对象,格式将变成这样:
{"json":[{},{}]}
因为struts——json-plugin对map转json串就是这样的格式。转出来是个json对象而不是像List转出来事个json数组
发现其中的差别了吗,是的,后者比前者多了一部分,而且返回的是json对象,而不是ext需要的json数组格式,想要struts返回正常显示,你应该这样:
1:不用map,用json字符串,把json定义为成员变量
String json = "[{},{}]";//最终赋值成这样
2: 对应配置文件如下
<action name="getJson" class="com.action.TreeAction1">
<result type="json">
<param name="root">json</param>
</result>
</action>
那么前台接收的json串就是 [{},{}]的格式了,才满足exttree的格式 。
一般这种tree,还有griddata的json数据,我会在后台定义一个用来传值的dto,那么就好多了, 省得在后台拼接字符串,还容易出错。还是面向对象的好。
vo:
public class TreeVo{
private Integer id;
private String text;
//setter/getter省略
}
Action:
private List<TreeVo> treeData;
xml:
<result type="json">
<param name="root">treeData</param>
</result>

ps: 纯手打哦~
uftdskfkthh
2012-07-19 · 超过28用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:57.8万
展开全部
你是不是认为String json会被自动转换为json格式的数据?

你把它存储到map("json",json);struts2转换的时候会的确把解析成一个json:"内容是json", 但"内容是json"还是文本(至少firebug显示的不是对象而是文本),所以我觉得你在后台写个类,如TreeNode{ int id;Sting text; gettter/setter.....},然后生成一个列表List<TreeNode> nodes = new ArrayList<TreeNode>(); nodes.add(new TreeNode(1,"xxx"));....map.put("json",nodes);
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lblovewhx
2012-07-19 · TA获得超过220个赞
知道答主
回答量:109
采纳率:100%
帮助的人:70.6万
展开全部
最后一张图表示返回至正常且成功返回。那么问题出在
Ext.onReady(function(){
var tree = new Ext.tree.TreePanel({
el: 'tree',
loader: new Ext.tree.TreeLoader({dataUrl:'getJson.action',method:'POST'}),
root:'json'
});
var root = new Ext.tree.AsyncTreeNode({
id: '0',
text:'我是根'
});
tree.setRootNode(root);
tree.render();
root.expand(false, false);
});
楼主检查一下,ext的显示吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
forever_cy_07
2012-07-20 · 超过35用户采纳过TA的回答
知道答主
回答量:290
采纳率:0%
帮助的人:115万
展开全部
首先你看看不用ext的tree接收能否收到json的返回值,这个可能和你的extjs没有什么关系,我看你的返回值的配置有点问题,还有就是map属性有get方法吗???
追问
map有get的方法!
我用传统的json返回方法,即response.getWrite().print("json"); 在ext可以正常显示数据,用struts2返回json就无法显示了
追答
你这样试试,
xml配置里改成这样

json_Tree.jsp

然后建立一个json_Tree.jsp的文件,文件内容如下:

最后,你action中建立一个属性
private String jsonString;get和set方法
在方法中jsonString=json

我以前是这样做的,有时候真的不知道为什么要这样写,你试试吧,我以前写ext的tree就是这样实现的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式