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);
}); 展开
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);
}); 展开
4个回答
展开全部
很简单的,你用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: 纯手打哦~
满足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: 纯手打哦~
展开全部
你是不是认为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);
你把它存储到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);
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最后一张图表示返回至正常且成功返回。那么问题出在
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的显示吧
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的显示吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先你看看不用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就是这样实现的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询