`
chineseoa
  • 浏览: 102961 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

将JSON Plugin返回值作为TreeLoader内容

阅读更多

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
分享到:
评论
2 楼 sunchaohui_koko 2009-09-14  
为什么要这样?
var data = Ext.util.JSON.decode(response.responseText);
var o = data.items;
//items是Map里面的key.这样就可以了呀
1 楼 albb 2008-10-29  
tony
什么时候briup讲授ext,回去听听,最近捣鼓了GWT-Ext,很麻烦

相关推荐

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    在Java世界里,`json-lib-2.1.jar` 是一个用于处理JSON的库,它提供了一系列的方法来将Java对象转换为JSON格式,以及将JSON字符串反序列化回Java对象。这个库支持多种Java类型,包括基本类型、集合、Map、自定义Java...

    struts2-json-plugin

    struts2-json-plugin,Struts JSON插件

    struts2-json-plugin-2.3.24-API文档-中文版.zip

    赠送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包

    struts2 json plugin jar包

    json plugin

    "json plugin"可能指的是一个用于集成到开发环境(如IDE或代码编辑器)中的工具,提供对JSON文件的便捷支持。这些插件可能包含以下功能: 1. **语法高亮**:通过为JSON文本提供不同的颜色和样式,帮助开发者更容易...

    struts2-json-plugin-2.3.8.jar

    在实际开发中,为了使用这个插件,你需要将`struts2-json-plugin-2.3.8.jar`文件放入项目的类路径(classpath)下,然后在Struts2的配置文件(通常为struts.xml)中启用JSON插件。在Action类中,定义返回JSON数据的...

    struts2-json-plugin源码

    `struts2-json-plugin`添加了JSON结果类型,当Action返回此类型时,会将结果转换为JSON格式。 2. **JSONResult类**:这是实现JSON结果类型的核心类,它继承自`com.opensymphony.xwork2.Result`接口。在执行过程中,...

    JSON Plugin.pdf

    1. **JSON结果类型**:该插件提供了一种“json”结果类型,能够将Action对象序列化成JSON格式的数据。序列化过程是递归的,意味着从Action类开始的整个对象图都会被序列化(可以通过设置“root”属性自定义根对象)...

    struts2-json-plugin-2.1.8jar包.zip

    使用Struts2 JSON Plugin,开发者可以设置Action的返回类型为"json",这样在Action执行完毕后,Struts2会自动将Action的模型驱动数据转化为JSON格式并发送到客户端。这大大简化了服务器端与客户端之间通过HTTP传递...

    struts2.1.6利用convention-plugin和json-plugin实现json零配置

    JSON Plugin是为了方便地将Struts2 Action的结果转换为JSON格式。在Web应用中,特别是与AJAX交互时,JSON格式的数据交换非常常见。使用JSON Plugin,开发者可以无需手动编写转换逻辑,只需添加一个简单的注解,就能...

    json-plugin

    总之,JSON-plugin作为一个针对JSON数据的工具或库,它的作用是简化JSON数据的处理,提高开发效率。具体功能和使用方法需要查看其官方文档或源代码来了解。在实际项目中,正确理解和使用这类工具能够极大提升开发...

    struts2-json-plugin-2.2.3 源码

    struts2-json-plugin-2.2.3-sources.jar 源码

    struts2-json-plugin-2.1.8.1.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-json-plugin-2.2.3.1能用的包

    struts2-spring-plugin-2.3.15.2.jar ; struts2-json-plugin-2.3.16.3.jar

    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

    struts2-json-plugin-2.1.8.zip_Java 8_json-plugin-2.1.8

    1. **添加依赖**:首先,需要将`struts2-json-plugin-2.1.8.jar`文件添加到项目的类路径中,如果是Maven项目,需要在pom.xml中配置对应的依赖。 2. **配置Struts2核心过滤器**:在web.xml中配置Struts2的核心过滤器...

    struts2-json-plugin-2.2.1.jar

    struts2自带的json转换 倒入jar文件 struts.xml中 &lt;package ......extends="json-default" &lt;result type="json"/&gt;

    @@@extjs+struts2+json plugin的例子

    `Struts2`与`ExtJS`结合时,通常作为后端服务,接收并处理来自前端的请求,然后返回JSON数据。 再者,`JSON`(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和...

Global site tag (gtag.js) - Google Analytics