有关struts2+jquery+treeview的应用总结

本文介绍了一种使用JSP、jQuery和Struts框架实现动态加载树状菜单的方法。通过Ajax请求从服务器获取JSON格式的数据,递归构建DOM结构,并利用jQuery插件展示为树形结构。

首先,先附上我的JSP页面的代码:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <base href="<%=basePath%>">

        <title>我的第一个tree</title>
        <link rel="stylesheet" href="lib/jquery.treeview.css" />

        <link rel="stylesheet" href="css/screen.css" />

        <script src="lib/jquery.js" type="text/javascript"></script>
        <script src="lib/jquery.cookie.js" type="text/javascript"></script>
        <script src="lib/jquery.treeview.js" type="text/javascript"></script>
        <script src="lib/jquery.treeview.async.js" type="text/javascript"></script>
        <script type="text/javascript">
         var treeList;
         var treeView;
         $(document).ready(function(){
                   jQuery.ajax({
                          type:"post",
                          url:"json_templateTree.action",
                          dataType:"json",
                          global:false,
                          success: function(root){
                                
                                   treeList = root.treeViewList;
                                   treeView = root.treeView;
                                   $("#templateLeft").append("<li class='"+treeView.classes+"'>"
                                                           +"<span id='"+treeView.treeId+"' class='folder'>"
                                                           +treeView.treeName+"</a>"
                                                           +"</span>"
                                                           +"<ul id='tm"+treeView.treeId+"'></ul></li>");
                                    template_tree(treeView);      //调用迭代函数
                                    $("#templateLeft").treeview({
                                        control:"#treecontrol"//对于body中的 ,可以对树的控制
                                        }); //调用jquery_treeview中treeview函数
                            }
                    });
             });

            //迭代函数
            function template_tree(root){
                    var oappend;
                    if(root.haschildren){
                             $(treeList).each(function(){
                                       if(root.treeId == this.parentNode){
                                                   if(this.haschildren){
                                                              oappend = "<li  class='"+this.classes+"'>"
                                                                       +"<span id='"+this.treeId+"' class='folder'>"
                                                                       +this.treeName+"</a>"
                                                                       +"</span>"
                                                                       +"<ul id='tm"+this.treeId+"'></ul></li>";
                                                    }else{
                                                              oappend = "<li  class='"+this.classes+"'><span id='"+this.treeId+"' class='"+this.classes+"'>"
                                                                        +"<a href='javascript:void(0)' target='rightFrame'"
                                                                        +"onclick=openPage('"+this.treeId+"')> "+this.treeName+"</a>"
                                                                        +"</span></li>";
                                                     }
                                                    $("#tm"+root.treeId).append(oappend);
                                                    template_tree(this);
                                             }
                                     });
                            }
                  }
                 //当点击tree链接时所调用的函数,这里可以取得树的id,进行自己相应处理
                  function openPage(id){
                       // alert(id);

                 }
  </script>
    </head>

    <body>
        <div id="main">
            <ul id="templateLeft" class="filetree"></ul>



        </div>
        <div id="treecontrol">
            <a href="#">收起</a>
            <a href="#">展开</a>
            <a href="#">收起/展开</a>
        </div>
    </body>
</html>
还有action的代码:

package com.icafe.action;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.icafe.entity.TreeView;
import com.opensymphony.xwork2.ActionSupport;


public class treeAction extends ActionSupport {
   
      private static final long serialVersionUID = 1L;
      @SuppressWarnings("unused")
    private String treeId;
      private TreeView treeView;   //树基础类
      private Integer i=1;
      private String rootNode;
      public TreeView getTreeView() {
        return treeView;
    }
    public void setTreeView(TreeView treeView) {
        this.treeView = treeView;
    }
    private List<TreeView> treeViewList = new ArrayList<TreeView>();//盛放树的集合
     

      public List<TreeView> getTreeViewList() {
        return treeViewList;
    }
    public void setTreeViewList(List<TreeView> treeViewList) {
        this.treeViewList = treeViewList;
    }
    //生成树方法
      public String templateTree(){
            String path = "D:/测试";
            File rootFile = new File(path);
            treeView = new TreeView();
         
            if("测试".equals(rootFile.getName())){ //跟目录
               
                      treeView.setTreeId("1");
                      treeView.setParentNode("1");
                      treeView.setTreeName(rootFile.getName());
                      treeView.setClasses("filetree");
                      treeView.setExpanded(true);
                      treeView.setHaschildren(true);
                      treeView.setFilePath(path);
                      rootNode = treeView.getTreeId();
                      buildDirectoryNode(treeView);
  
               }
           // printTree(treeView);//调用测试方法
               return "json";  //数据以json返回
        }
       
        /**
          * 创建目录和文件树
          * @param tv  父对象
        */
         private void buildDirectoryNode(TreeView tv){
               List<TreeView>  frequencyLsit = new ArrayList<TreeView>();
               if(tv.isHaschildren()){ //判断是否有子目录
                      File fif = new File(tv.getFilePath());
                      if(fif.isDirectory()){ //是目录
                            File[] files = fif.listFiles();
                            for(File fi:files){
                                    TreeView tvv = new TreeView();
                                    tvv.setTreeId(tv.getTreeId()+"-"+i);
                                    tvv.setParentNode(tv.getTreeId());
                                    tvv.setTreeName(fi.getName());
                                    if(fi.isDirectory()){
                                            tvv.setHaschildren(true);
                                    }else{
                                            tvv.setClasses("file");
                                            tvv.setExpanded(true);
                                    }
                                    tvv.setFilePath(fif.getPath()+"/"+fi.getName());
                                    frequencyLsit.add(tvv);
                                    i++;
                              }
                              i=1;
                        }
                  }
                  if(!frequencyLsit.isEmpty()){
                         for(TreeView fq:frequencyLsit){
                         treeViewList.add(fq);
                         buildDirectoryNode(fq);
                  }
             }
         }
         /**
           * 打印树(测试方法)
           * @param treeViewList 树集合
          */
          private String space = "";
          private void printTree(TreeView tv){
                  if(tv.isHaschildren()){
                        System.out.println(space+"<ul class='"+tv.getClasses()+"'>");
                        space += "    ";
                        for(TreeView tvv:treeViewList){
                                 if(tv.getTreeId().equals(tvv.getParentNode())){
                                          System.out.println(space+"<li><span id='"+tvv.getTreeId()+"' class='"+tvv.getClasses()+"'>"+tvv.getTreeName()+"</span>");
                                          printTree(tvv);
                                 }
                         }
                         System.out.println(space+"</ul>");
                         System.out.println(space+"</li>");
                         space = "   ";
                    }else{
                         System.out.println(space+"</li>");
                 }
           }
}
再是实体类的代码:
    package com.icafe.entity;

public class TreeView {
   
     /**
      * 树的id
      */
     private String treeId;  
     /**
      * 树显示的名字
      */
     private String treeName; 
     /**
      * 父节点
      */
     private String parentNode; 
     /**
      * true:代表这个结点下的child是展开的 ; false:代表这个结点下的child是闭合的
      */
     private boolean expanded = false;
     /**
      * true,表示其下面有子结点 ; false:没有子节点
      */
     private boolean haschildren = false;
     /**
      * 普通节点样式  folder:打开的文件夹  closed:关闭的文件夹  ;  根节点文件夹 filetree  ;  文件 file
      */
     private String classes = "closed";
     /**
      * 文件的路径
      */
     private String filePath;
     
     
     public TreeView() {
      super();
     }
     public TreeView(String treeId, String treeName, String parentNode,
       boolean expanded, boolean haschildren, String classes,
       String filePath) {
      super();
      this.treeId = treeId;
      this.treeName = treeName;
      this.parentNode = parentNode;
      this.expanded = expanded;
      this.haschildren = haschildren;
      this.classes = classes;
      this.filePath = filePath;
     }
     public String getTreeId() {
      return treeId;
     }
     /**
      * 设置树的ID
      * @param treeId
      */
     public void setTreeId(String treeId) {
      this.treeId = treeId;
     }
     
     public String getTreeName() {
      return treeName;
     }
     /**
      * 设置树的名称
      * @return
      */
     public void setTreeName(String treeName) {
      this.treeName = treeName;
     }
     public String getParentNode() {
      return parentNode;
     }
     /**
      * 设置父节点
      * @param parentNode
      */
     public void setParentNode(String parentNode) {
      this.parentNode = parentNode;
     }
     public boolean isExpanded() {
      return expanded;
     }
     /**
      * true:代表这个结点下的child是展开的 ; false:代表这个结点下的child是闭合的
      */
     public void setExpanded(boolean expanded) {
      this.expanded = expanded;
     }
     public boolean isHaschildren() {
      return haschildren;
     }
     /**
      * true,表示其下面有子结点 ; false:没有子节点
      * @param haschildren
      */
     public void setHaschildren(boolean haschildren) {
      this.haschildren = haschildren;
     }
     public String getClasses() {
      return classes;
     }
     /**
      * 设置classes
      * @param classes
      */
     public void setClasses(String classes) {
      this.classes = classes;
     }
     public String getFilePath() {
      return filePath;
     }
     /**
      * 设置文件路径
      * @param filePath
      */
     public void setFilePath(String filePath) {
      this.filePath = filePath;
     }

}
最后是struts.xml的:


<action name="json_*" class="com.icafe.action.treeAction" method="{1}">
            
            <result name="json" type="json"></result>
            <result name="input">/test.jsp</result>
        </action>   


就大功告成。只是没有连数据库而已   

【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)内容概要:本文介绍了基于蒙特卡洛和拉格朗日方法的电动汽车充电站有序充电调度优化方案,重点在于采用分散式优化策略应对分时电价机制下的充电需求管理。通过构建数学模型,结合不确定性因素如用户充电行为和电网负荷波动,利用蒙特卡洛模拟生成大量场景,并运用拉格朗日松弛法对复杂问题进行分解求解,从而实现全局最优或近似最优的充电调度计划。该方法有效降低了电网峰值负荷压力,提升了充电站运营效率与经济效益,同时兼顾用户充电便利性。 适合人群:具备一定电力系统、优化算法和Matlab编程基础的高校研究生、科研人员及从事智能电网、电动汽车相关领域的工程技术人员。 使用场景及目标:①应用于电动汽车充电站的日常运营管理,优化充电负荷分布;②服务于城市智能交通系统规划,提升电网与交通系统的协同水平;③作为学术研究案例,用于验证分散式优化算法在复杂能源系统中的有效性。 阅读建议:建议读者结合Matlab代码实现部分,深入理解蒙特卡洛模拟与拉格朗日松弛法的具体实施步骤,重点关注场景生成、约束处理与迭代收敛过程,以便在实际项目中灵活应用与改进。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值