`
shirlly
  • 浏览: 1652294 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

用<s:tree/>构造动态树

阅读更多
例将会把WEB应用程序的目录树展现在JSP页面中。因此,我需要先包装一下java.io.File 类,代码如下:

package tutorial;

import java.io.File;

public class FileWrapper {
    private File file;

    public FileWrapper(String path) {
        file = new File(path);
    }
    
    public FileWrapper(File file) {
        this.file = file;
    }
    
    public String getId() {
        return "file_" + file.hashCode();
    }
    
    public String getName() {
        return file.getName();
    }
    
    public String getAbsolutePath() {
        return file.getAbsolutePath();
    }
    
    public FileWrapper[] getChildren() {
        File[] files = file.listFiles();
        if(files != null && files.length > 0) {
            int length = files.length;
            FileWrapper[] wrappers = new FileWrapper[length];
            for(int i = 0; i < length; ++i) {
                wrappers[i] = new FileWrapper(files[i]);
            }
            return wrappers;
        }
        return new FileWrapper[0];
    }
}

清单1 src/tutorial/FileWrapper.java
之所以需要对File类进行如此包装,是因为<s:tree />用于动态树时,rootNode、nodeIdProperty、nodeTitleProperty 和 childCollectionProperty等属性都必填的。

然后是Action类的代码如下:

package tutorial;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionSupport;

public class DynamicTreeAction extends ActionSupport implements ServletRequestAware {
    private static final long serialVersionUID = 1128593047269036737L;
    
    private HttpServletRequest request;
    private FileWrapper root;

    public void setServletRequest(HttpServletRequest request) {    
        this.request = request;
    }
    
    public FileWrapper getRoot() {
        return root;
    }
    
    @Override
    public String execute() {
        root = new FileWrapper(request.getSession().getServletContext().getRealPath("/"));        
        return SUCCESS;
    }
}
清单2 src/tutorial/DynamicTreeAction.java
上述代码取得WEB应用程序的根目录的绝对路径后,初始化FileWrapper对象root。该对象将为JSP页面的<s:tree />的根节点。如下代码所示:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Struts 2 AJAX - More Tree</title>
        <s:head theme="ajax" debug="true" />
        <script type="text/javascript">
        /* <![CDATA[ */
            function treeNodeSelected(arg) {
                alert(arg.source.title + ' selected');
            }
            
            function treeNodeExpanded(arg) {
                alert(arg.source.title + ' expanded');
            }
            
            function treeNodeCollapsed(arg) {
                alert(arg.source.title + ' collapsed');
            }
            
            dojo.addOnLoad(function() {                
                var t = dojo.widget.byId('appFiles');
                dojo.event.topic.subscribe(t.eventNames.expand, treeNodeExpanded);                
                dojo.event.topic.subscribe(t.eventNames.collapse, treeNodeCollapsed);
                
                var s = t.selector;                
                dojo.event.connect(s, 'select', 'treeNodeSelected');
            });
        /* ]]> */    
        </script>
    </head>
    <body>
        <h2>
            Dynamic Tree Example
        </h2>
        <div style="float:left; margin-right: 50px;">
            <s:tree id="appFiles" theme="ajax" rootNode="root"
                nodeTitleProperty="name" nodeIdProperty="id"
                childCollectionProperty="children" />
        </div>
    </body>
</html>
清单3 WebContent/Tree.jsp
因为<s:tree />的treeCollapsedTopic和treeExpandedTopic属性都没有起作用,所以如果我们想要监听这两个事件,就必须使用上述代码的方法。

最后是struts.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="Struts2_AJAX_DEMO" extends="struts-default">
        <action name="DynamicTree" class="tutorial.DynamicTreeAction">
            <result>Tree.jsp</result>
        </action>
    </package>
</struts>
清单4 src/struts.xml
分享到:
评论
1 楼 aspwater 2012-05-09  
运行不了

相关推荐

    Struts2数Tree

    1. **定义动态树**:在jsp页面中使用`s:tree`标签定义动态树的基本属性。 ```xml &lt;s:tree id="ServiceList" rootNode="root" nodeIdProperty="id" nodeTitleProperty="name" childCollectionProperty=...

    strut2树形菜单

    4. **构造树形结构**:在Action类中获取数据库数据并转换为树形结构。 ```java public class TreeAction extends ActionSupport { private List&lt;Terrain&gt; terrains; private StrutsTreeNode root; public ...

    jquery ajax TreeView asp.net改进版

    &lt;%--&lt;script src="lib/jquery/plugins/treeview/js/tree3.js" type="text/javascript"&gt;&lt;/script&gt;--%&gt; &lt;!--你可以把下面的代码放到一个js文件当中--&gt; &lt;script type="text/javascript"&gt; var checknodes = "HJH8,...

    二叉树代码 用c++实现

    TreeNode* buildTree(vector&lt;int&gt;& preorder, vector&lt;int&gt;& inorder) { // ... 实现细节 } ``` 3. **前序遍历**: 前序遍历的顺序是:根节点 -&gt; 左子树 -&gt; 右子树。我们可以使用递归方法实现: ```cpp void...

    二叉排序树模板类c++

    void BiSortTree&lt;T&gt;::InsertBST(BiNode&lt;T&gt;* s) { if (root == NULL) { root = s; } else { BiNode&lt;T&gt;* p = root; BiNode&lt;T&gt;* pre = NULL; while (p) { if (s-&gt;data == p-&gt;data) { return; } else if (s-&gt;...

    用Js和css实现树状图

    &lt;div id="tree"&gt;&lt;/div&gt; &lt;script src="dtree.js"&gt;&lt;/script&gt; &lt;/body&gt; &lt;/html&gt; ``` 接下来,我们分析`dtree.js`。这是一个JavaScript文件,负责处理树状图的逻辑。它可能包含了创建和操作DOM元素的函数,以及响应...

    微软等公司数据结构+算法面试100_前40(附答案)

    输入一棵二元查找树(即二叉搜索树,Binary Search Tree, BST),将其转换为一个排序的双向链表。转换过程中不能创建任何新的节点,只能通过调整现有节点的指针来实现。 **解题思路:** 为了将二叉搜索树转换为排序...

    c语言suffix tree库

    构造前缀树,深度广度优先搜索等功能。 This library is an implementation of the suffix tree algorithm applied to indexing. A search on "suffix trees Ukkonen" on a search engine should give you an idea ...

    MFC上实现tree结构

    在Microsoft Foundation Classes (MFC) 中,`CTreeCtrl` 类是用于实现树形控件的主要工具。这个控件在Windows应用程序中广泛用于展现层次化的数据结构,例如文件系统、组织结构或者任何需要分层展示的数据。在MFC中...

    所有关于树的函数实现

    1. **初始化**:使用一个栈 `Stack&lt;BSTNode&lt;T&gt;*&gt; s` 来辅助存储待访问的节点。 2. **遍历过程**: - 当前节点 `t` 不为空时,输出其值。 - 如果存在右子树,则将右子树的根节点压入栈。 - 接着处理左子树(若存在...

    霍夫曼编码c++实现方法

    MinHeap&lt;BinaryTree&lt;int&gt; &gt; heap(n); int i=0; for(;i&lt;n;i++){ heap.Insert(BinaryTree&lt;int&gt;(weights[i])); } //选择堆中根数值较小的两棵树,组成一棵新树然后插入堆里,并把原来的两棵树从堆里删除 Binary...

    构造哈夫曼树C++代码实现

    ### 构造哈夫曼树C++代码实现 #### 哈夫曼树简介 哈夫曼树(Huffman Tree)又称最优二叉树,是一种带权路径长度最短的二叉树,或者说其带权路径长度是最小的。在数据压缩、编码等领域有着广泛的应用。哈夫曼树的...

    关于Fault Tree+软件使用说明

    标题《关于Fault Tree+软件使用说明》涉及的知识点主要围绕故障树分析(FTA)和其相关软件的使用方法。故障树分析是一种图形化、系统性的风险评估工具,主要用于评估复杂系统中可能发生的故障或事件,并找出导致这些...

    java基于链表实现树结构(算法源码)

    //(单节点树)构造方法 public TreeLinkedList() { this(null, null, null, null); } //构造方法 public TreeLinkedList(Object e, TreeLinkedList p, TreeLinkedList c, TreeLinkedList s) { element = e; ...

    java kd树实现

    `KDTree&lt;S&gt;`类是实际的KD树结构,它包含根节点、树的大小(即数据点的数量)、维度数`k`、一个`Comparator&lt;S&gt;`列表来处理不同维度的比较,以及一个`KDDistance&lt;S&gt;`接口实例,用于计算两点之间的距离。`KDDistance&lt;S&gt;...

    哈夫曼编解码完整c程序代码.pdf

    // 此函数用于构造哈夫曼树的前序遍历 // 输入:哈夫曼树节点、标志(表示是否是左孩子)、队列后端指针 // 输出:更新后的队列 // 遍历过程记录每个节点的路径,用于生成编码 } void translatef(char *source, ...

    数据结构课程设计最小生成树的构建实验报告.docx

    #include&lt;iostream.h&gt; class prims{ private: int n; //节点的个数 int graph_edge[99][4]; //图的边 int g; //图中边的个数 int tree_edge[99][4]; //树的边 int t; //树的边的个数 int s; //源节点 //把图...

    Java基于向量实现的完全二叉树(算法源码)

    //构造方法:默认的空树 public ComplBinTree_Vector() { T = new Vector_ExtArray(); root = null; } //构造方法:按照给定的节点序列,批量式建立完全二叉树 public ComplBinTree_Vector(Sequence s) { this...

Global site tag (gtag.js) - Google Analytics