JSON Plugin插件返回值为 {nodes:[{"id":1,"leaf":false,"qtip":"a","text":"a"}]}格式,而TreeLoader要求是一数组格式,如何将该对象转化为数据,可通过重写Ext.tree.TreeLoader的processResponse方法实现,关键代码:
TonyTreeLoader = function(config) {
TonyTreeLoader.superclass.constructor.call(this, config);
}
Ext.extend(TonyTreeLoader, Ext.tree.TreeLoader, {
processResponse : function(response, node, callback){
var json = response.responseText;
/*added to remove result wrapper from JSON*/
if(json.indexOf('{"nodes":') == 0) json = json.substring(9, json.length-1);
alert(json);
try {
var o = eval("("+json+")");
node.beginUpdate();
for(var i = 0, len = o.length; i < len; i++){
var n = this.createNode(o[i]);
if(n){
node.appendChild(n);
}
}
node.endUpdate();
if(typeof callback == "function"){
callback(this, node);
}
}catch(e){
this.handleFailure(response);
}
}
});
下面给出一份完整示意代码:
1. HTML
该HTML中TreeLoader数据源自一Action返回内容
temp.html
------------------------------------------------------------------------------------------------------
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<link rel="stylesheet" type="text/css" href="plugins/extjs/ext-2.0/resources/css/ext-all.css" />
<link rel="stylesheet" type="text/css" href="stylesheet/ext-patch.css" />
<script type="text/javascript" src="plugins/extjs/ext-2.0/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="plugins/extjs/ext-2.0/ext-all.js"></script>
<script type="text/javascript" src="javascript/common.js"></script>
<script type="text/javascript">
Ext.BLANK_IMAGE_URL = 'plugins/extjs/ext-2.0/resources/images/default/s.gif';
Ext.QuickTips.init();
TonyTreeLoader = function(config) {
TonyTreeLoader.superclass.constructor.call(this, config);
}
Ext.extend(TonyTreeLoader, Ext.tree.TreeLoader, {
processResponse : function(response, node, callback){
var json = response.responseText;
/*added to remove result wrapper from JSON*/
if(json.indexOf('{"nodes":') == 0) json = json.substring(9, json.length-1);
try {
var o = eval("("+json+")");
node.beginUpdate();
for(var i = 0, len = o.length; i < len; i++){
var n = this.createNode(o[i]);
if(n){
node.appendChild(n);
}
}
node.endUpdate();
if(typeof callback == "function"){
callback(this, node);
}
}catch(e){
this.handleFailure(response);
}
}
});
Ext.onReady(function(){
var tp=new Ext.tree.TreePanel({
renderTo:"hello",
root:new Ext.tree.AsyncTreeNode({
id:"root",
text:"日志分类",
expanded:true
}),
loader:new TonyTreeLoader({
url:"topicCategory.action",
listeners:{
"beforeload":function(treeLoader,node) {
treeLoader.baseParams.id=(node.id!="root"?node.id:"");
}
}
})
})
});
</script>
</head>
<body>
<div id="hello"></div>
</body>
</html>
2. Action
import bean.Node;
import java.util.*;
public class TopicCategoryAction {
static Node v1 = new Node(1, false, "a", "a");
static Node v11 = new Node(11, false, "b", "b");
static Node v111 = new Node(111, true, "c", "c");
static Node v2 = new Node(2, true, "d", "d");
static Map<String, Node[]> data = new HashMap<String, Node[]>();
static {
data.put("", new Node[] { v1, v2 });
data.put("1", new Node[] { v11 });
data.put("11", new Node[] { v111 });
}
static public Node[] getData(String id) {
Node[] temp = null;
return (temp = data.get(id)) == null ? new Node[0] : temp;
}
private String id = "";
private Node[] nodes;
public String execute() {
if (id == null || id.trim().length() < 1) {
id = "";
}
nodes = getData(id);
return "success";
}
public void setId(String id) {
this.id = id;
}
public Node[] getNodes() {
return nodes;
}
}
该Action使用一Map模拟来自数据库的查询内容, 简化操作。其间有涉及到一自定义类型 Node, 代码如下:
package bean;
public class Node {
private int id;
private boolean leaf;
private String qtip;
private String text;
public Node(){}
public Node(int id,boolean leaf, String qtip,String text) {
this.id=id;
this.leaf=leaf;
this.qtip=qtip;
this.text=text;
}
public String toString() {
return "{id:"+id+"," +
"leaf:"+leaf+"," +
"qtip:\""+qtip+"\"," +
"text:\""+text+"\"}";
}
... 省去属性对应的setter/getter方法
}
3. struts.xml
Action写后不忘在struts.xml文件中配置,内容如下:
<struts>
<package name="enterinfo" extends="json-default">
<action name="topicCategory" class="com.briup.TopicCategoryAction">
<result type="json"/>
</action>
</package>
</struts>
最后 temp.html 运行效果如下:
- 大小: 2.2 KB
分享到:
相关推荐
在Java世界里,`json-lib-2.1.jar` 是一个用于处理JSON的库,它提供了一系列的方法来将Java对象转换为JSON格式,以及将JSON字符串反序列化回Java对象。这个库支持多种Java类型,包括基本类型、集合、Map、自定义Java...
struts2-json-plugin,Struts JSON插件
赠送jar包:struts2-json-plugin-2.3.24.jar; 赠送原API文档:struts2-json-plugin-2.3.24-javadoc.jar; 赠送源代码:struts2-json-plugin-2.3.24-sources.jar; 赠送Maven依赖信息文件:struts2-json-plugin-...
struts2 json plugin jar包
"json plugin"可能指的是一个用于集成到开发环境(如IDE或代码编辑器)中的工具,提供对JSON文件的便捷支持。这些插件可能包含以下功能: 1. **语法高亮**:通过为JSON文本提供不同的颜色和样式,帮助开发者更容易...
在实际开发中,为了使用这个插件,你需要将`struts2-json-plugin-2.3.8.jar`文件放入项目的类路径(classpath)下,然后在Struts2的配置文件(通常为struts.xml)中启用JSON插件。在Action类中,定义返回JSON数据的...
`struts2-json-plugin`添加了JSON结果类型,当Action返回此类型时,会将结果转换为JSON格式。 2. **JSONResult类**:这是实现JSON结果类型的核心类,它继承自`com.opensymphony.xwork2.Result`接口。在执行过程中,...
1. **JSON结果类型**:该插件提供了一种“json”结果类型,能够将Action对象序列化成JSON格式的数据。序列化过程是递归的,意味着从Action类开始的整个对象图都会被序列化(可以通过设置“root”属性自定义根对象)...
使用Struts2 JSON Plugin,开发者可以设置Action的返回类型为"json",这样在Action执行完毕后,Struts2会自动将Action的模型驱动数据转化为JSON格式并发送到客户端。这大大简化了服务器端与客户端之间通过HTTP传递...
JSON Plugin是为了方便地将Struts2 Action的结果转换为JSON格式。在Web应用中,特别是与AJAX交互时,JSON格式的数据交换非常常见。使用JSON Plugin,开发者可以无需手动编写转换逻辑,只需添加一个简单的注解,就能...
总之,JSON-plugin作为一个针对JSON数据的工具或库,它的作用是简化JSON数据的处理,提高开发效率。具体功能和使用方法需要查看其官方文档或源代码来了解。在实际项目中,正确理解和使用这类工具能够极大提升开发...
struts2-json-plugin-2.2.3-sources.jar 源码
在Struts2框架中,该插件允许开发者将Action的返回结果直接转换为JSON格式,方便进行Ajax(Asynchronous JavaScript and XML)操作,提高Web应用的响应速度和用户体验。 标题"struts2-json-plugin-2.1.8.1.jar"表明...
struts2-json-plugin-2.2.3.1能用的包
struts2-spring-plugin-2.3.15.2.jar ; struts2-json-plugin-2.3.16.3.jarstruts2-spring-plugin-2.3.15.2.jar ; struts2-json-plugin-2.3.16.3.jar
1. **添加依赖**:首先,需要将`struts2-json-plugin-2.1.8.jar`文件添加到项目的类路径中,如果是Maven项目,需要在pom.xml中配置对应的依赖。 2. **配置Struts2核心过滤器**:在web.xml中配置Struts2的核心过滤器...
struts2自带的json转换 倒入jar文件 struts.xml中 <package ......extends="json-default" <result type="json"/>
`Struts2`与`ExtJS`结合时,通常作为后端服务,接收并处理来自前端的请求,然后返回JSON数据。 再者,`JSON`(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和...