jsp树形菜单完整代码及截图

合集下载

js树形菜单递归函数

js树形菜单递归函数

js树形菜单递归函数编写 JavaScript 的树形菜单递归函数通常涉及到处理包含父子关系的数据结构,比如树形结构。

这样的函数可以用来递归地遍历树形数据,以便在前端页面上构建出树形菜单。

下面是一个简单的示例代码:javascript.function generateTreeMenu(items, parentId) {。

let result = [];for (let item of items) {。

if (item.parentId === parentId) {。

let children = generateTreeMenu(items, item.id);if (children.length) {。

item.children = children;}。

result.push(item);}。

}。

return result;}。

在这个示例中,`generateTreeMenu` 函数接受一个包含所有菜单项的数组 `items` 和一个父节点的 `parentId` 作为参数。

它会遍历整个 `items` 数组,找到所有 `parentId` 与传入的`parentId` 相匹配的菜单项,并将它们递归地添加到父菜单项的`children` 属性中。

这个函数的递归调用使得它能够处理任意深度的树形结构,从而生成完整的树形菜单数据。

在实际应用中,你可以根据具体的需求对这个函数进行定制,比如添加其他属性、排序逻辑等。

需要注意的是,这只是一个简单的示例代码,实际应用中可能需要根据具体的数据结构和业务逻辑进行适当的修改和扩展。

希望这个示例能够帮助到你。

树形菜单及其事件处理(java实现)

树形菜单及其事件处理(java实现)

树形菜单及其事件儿处理(java实现)效果图如下:import java.awt.BorderLayout;import java.awt.EventQueue;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import javax.swing.JTextArea;import javax.swing.JTree;import javax.swing.UIManager;import javax.swing.event.TreeSelectionEvent;import javax.swing.event.TreeSelectionListener;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.T reePath;/*** 树形菜单及其事件处理** @author xlfdzhf*/@SuppressWarnings("serial")public class TreeEventFrame extends JFrame {private JSplitPane splitPane;private JPanel leftPanel;private JPanel rightPanel;private JTree tree;private JTextArea textArea;TreeEventFrame(){setSize( 500, 300 );setLayout( new BorderLayout());splitPane = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT );//1.左侧DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("学科");DefaultMutableTreeNode level_1Node = new DefaultMutableTreeNode("数学");DefaultMutableTreeNode level_2Node = new DefaultMutableTreeNode("物理");rootNode.add( level_1Node );rootNode.add( level_2Node );DefaultMutableTreeNode level_11Node = new DefaultMutableTreeNode("小学数学");DefaultMutableTreeNode level_12Node = new DefaultMutableTreeNode("初中数学");DefaultMutableTreeNode level_13Node = new DefaultMutableTreeNode("高中数学");level_1Node.add(level_11Node);level_1Node.add(level_12Node);level_1Node.add(level_13Node);DefaultMutableTreeNode level_21Node = new DefaultMutableTreeNode("初中物理");DefaultMutableTreeNode level_22Node = new DefaultMutableTreeNode("高中物理");DefaultMutableTreeNode level_23Node = new DefaultMutableTreeNode("大学物理");level_2Node.add(level_21Node);level_2Node.add(level_22Node);level_2Node.add(level_23Node);//面板设置leftPanel = new JPanel();leftPanel.setLayout( new BorderLayout());final JScrollPane leftScrollPane = new JScrollPane();DefaultTreeModel treeModel = new DefaultTreeModel( rootNode );tree = new JTree( treeModel );leftScrollPane.setViewportView( tree );leftPanel.add( leftScrollPane , BorderLayout.CENTER );splitPane.setDividerLocation( 120 );splitPane.setLeftComponent( leftPanel );getContentPane().add( splitPane , BorderLayout.CENTER );//2.右侧final JScrollPane rightScrollPane = new JScrollPane();rightPanel = new JPanel();rightPanel.setLayout( new BorderLayout());textArea = new JTextArea();rightPanel.add( textArea, BorderLayout.CENTER );rightScrollPane.setViewportView( rightPanel );splitPane.setRightComponent( rightScrollPane );//3.树的事件处理tree.addTreeSelectionListener( new TreeSelectionListener(){@Overridepublic void valueChanged(TreeSelectionEvent arg0) {//如果不被选,则不执行,反之,执行if ( !tree.isSelectionEmpty()){//获得所选节点的路径名TreePath[] selectPaths = tree.getSelectionPaths();for ( int i = 0; i < selectPaths.length; i ++ ){//System.out.println( selectPaths[ i ]);//以Object数组的形式返回该路径中的所有节点的对象Object[] paths = selectPaths[ i ].getPath();for ( int j = 0; j < paths.length; j ++ ){//System.out.print( paths[ j ] + " -> " );DefaultMutableTreeNode node = (DefaultMutableTreeNode) paths[ j ];textArea.append( node.getUserObject() + (( j == paths.length -1 ) ? "":" -> ") );//(( j == paths.length -1 ) ? "":" -> ")表示的是不在最后一个节点加入“->”符号}textArea.append("\n");}//System.out.println();}}});}public static void main(String[] args) {EventQueue.invokeLater( new Runnable(){@Overridepublic void run() {try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());} catch (Exception e) {}TreeEventFrame frame = new TreeEventFrame();frame.setVisible( true );frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );}});}}。

java实现遍历树形菜单两种实现代码分享

java实现遍历树形菜单两种实现代码分享

java实现遍历树形菜单两种实现代码分享⽂本主要向⼤家分享了java实现遍历树形菜单的实例代码,具体如下。

OpenSessionView实现:package org.web;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import org.dao.BaseHibernateDao;import org.hibernate.Hibernate;import org.hibernate.Session;import org.hibernate.Transaction;public class OpenSessionView extends BaseHibernateDao implements Filter {/**(⾮ Javadoc)* <p>Title: destroy</p>* <p>Description(描述): </p>* @see javax.servlet.Filter#destroy()*/@Overridepublic void destroy() {// TODO Auto-generated method stub}/**(⾮ Javadoc)* <p>Title: doFilter</p>* <p>Description(描述): </p>* @param arg0* @param arg1* @param arg2* @throws IOException* @throws ServletException* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)*/@Overridepublic void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {Session session = null;Transaction tx = null;try {session = getSession();tx = session.beginTransaction();arg2.doFilter(arg0, arg1);mit();}catch (Exception e) {e.printStackTrace();tx.rollback();}finally{closeSession();}}/**(⾮ Javadoc)* <p>Title: init</p>* <p>Description(描述): </p>* @param arg0* @throws ServletException* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)*/@Overridepublic void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}TreeAction实现package org.web;import net.sf.json.JSONArray;import net.sf.json.JSONObject;import org.Service.IVoteTreeService;import org.Service.impl.VoteTreeServiceImpl;import com.alibaba.fastjson.JSON;import com.opensymphony.xwork2.ActionSupport;public class TreeAction extends ActionSupport {private JSONArray treejson;private IVoteTreeService voteService = new VoteTreeServiceImpl();public String getTree(){treejson = voteService.getTreeJson();return SUCCESS;}public JSONArray getTreejson() {return treejson;}public void setTreejson(JSONArray treejson) {this.treejson = treejson;}}总结以上就是本⽂关于java实现遍历树形菜单两种实现代码分享的全部内容,希望对⼤家有所帮助。

树形菜单jsTree使用方法

树形菜单jsTree使用方法

树形菜单jsTree使⽤⽅法jsTree版本:3.0.4在 MVC中使⽤jsTreeModel:public class Department{public int Id { get; set; }public string Name { get; set; }public int PId { get; set; }}数据库:Controller:jsTree既可以⼀次性把所有节点都加载到客户端,也可以只加载⼀层,点击节点后再去服务端获取下层节点。

对于⼩的菜单可以⼀次性加载完,如果节点很多,可以按需加载(lazy loading)。

1、⼀次性加载完所有节点public JsonResult GetTreeData(int clickId = 0){// use databasevar db=new Salary.Models.EntityContext();/* ⼀次性加载完所有节点.* 前端只需配置 'data': {'url': '/Home/GetTreeData','dataType': 'json'* } 不⽤给服务端传值* 服务端不需写where*/var items=from item in db.Departmentselect new{id = item.Id,parent = item.PId.ToString() == "0" ? "#" : item.PId.ToString(), // root必须是# !text = };return Json(items, JsonRequestBehavior.AllowGet);}2、按需加载节点(lazy loading)public JsonResult GetTreeData(int clickId = 0){// use databasevar db=new Salary.Models.EntityContext();/* 异步加载节点(按需)前端需提供id传给服务端:'data': function (node) {return { id: node.id };}后端要在linq中加where筛选*/var items=from item in db.Departmentwhere item.PId == clickId // 在服务端要把所有上级节点找出来select new// 匿名类可以添加需要的字段,⽐如HasChildren{id = item.Id,parent = item.PId.ToString() == "0" ? "#" : item.PId.ToString(), // root必须是# !text = ,children = db.Department.Any(p => p.PId == item.Id) // true|false 是否有⼦项};return Json(items, JsonRequestBehavior.AllowGet);}View:<div id="jstree">@section scripts{<link href="~/Content/jstree/themes/default/style.min.css" rel="stylesheet"/><script src="~/Scripts/jstree/jstree.js"></script><script>$(document).ready(function () {$("#jstree").jstree({"core": {//'initially_open':["abc"],'data': {'url': '/Home/GetTreeData','dataType': 'json','data': function (node) { // 传给服务端点击的节点//return { id: node.id == "#" ? "0" : node.id };return { clickId: node.id };},success: function () {//alert('ok');}}}});// 展开节点$("#jstree").on("loaded.jstree", function (event, data) {// 展开所有节点//$('#jstree').jstree('open_all');// 展开指定节点//data.instance.open_node(1); // 单个节点(1 是顶层的id)data.instance.open_node([1, 10]); // 多个节点 (展开多个⼏点只有在⼀次性装载后所有节点后才可⾏) });// 所有节点都加载完后$("#jstree").on("ready.jstree", function (event, data) {//alert('all ok');data.instance.open_node(1); // 展开root节点//// 隐藏根节点 /questions/10429876/how-to-hide-root-node-from-jstree$("#1_anchor").css("visibility", "hidden");$("li#1").css("position", "relative")$("li#1").css("top", "-20px")$("li#1").css("left", "-20px")$(".jstree-last .jstree-icon").first().hide();});// 获得点击节点的id$('#jstree').on("changed.jstree", function (e, data) {console.log("The selected nodes are:");console.log(data.selected);alert('node.id is:' + data.node.id);alert('node.text is:'+data.node.text);console.log(data);// TODO: 传递给Tab//$.ajax({// 'url': 'Home/GetTreeData/',// 'data': { 'id': data.node.id }//});});});// end ready</script>根节点的⽗项是0,根节点只有⼀个,似乎显⽰出来也不好看:所以我们把它隐藏起来:PS:ready 和loaded 的区别:loaded.jstree: triggered after the root node is loaded for the first timeready.jstree : triggered after all nodes are finished loading参考:--End--。

[JSP页面文件目录树源码(递归算法)]递归创建文件夹目录树

[JSP页面文件目录树源码(递归算法)]递归创建文件夹目录树

[JSP页面文件目录树源码(递归算法)]递归创建文件夹目录树htmlheadtitle/titlemeta http-equiv=“Content-Type" content="text/html;charset=gb2312";script language="JavaScript"!--function MM_goToURL() { //v3.0var i, args=MM_goToURL.arguments; document.MM_returnValue = false;for (i=0; i(args.length-1); i+=2) eval(args[i]+".location=""+args[i+1]+""");}//--/scriptlink href="css/ip.css" rel="stylesheet" type="text/css"/headbody topmargin = "0" leftmargin = "0" marginheight = "0" marginwidth = "0" bgcolor="#FFFFFF"table border="0" cellspacing="0" cellpadding="0" height="80%"trtd/td/trtr valign="top"td height="223" span id="menus"/spanspan id="view"/span/td/trtr valign="bottom"td /td/tr/tablediv align="right"/div/bodyscript/*** 构造树,初值为0*/function isbrother(){var is=flase;}function tree(n) {var id = new Array("bar","pad","IMG src="/htmldata/2005-08-02/images/midnodeline.gif"border=0 align="absmiddle"IMG src="/htmldata/2005-08-02/images/close.gif "border=0 align="absmiddle"","IMG src="/htmldata/2005-08-02/images/midclosedfolder.gif "border=0 align="absmiddle"IMG src="/htmldata/2005-08-02/images/close.gif "border=0 align="absmiddle"","IMG src="/htmldata/2005-08-02/images/lastnodeline.gif"border=0 align="absmiddle"IMG src="/htmldata/2005-08-02/images/close.gif "border=0 align="absmiddle"if(n == 0) { // 初始化变量n = 1;i = 0;s = "";}s += "table border=0 cellspacing=0 cellpadding=0for(;itree_ar.length-1;i++) {var k = (n = tree_ar[i+1])?0:1;if(tree_ar[i]==false){id="IMG src="/htmldata/2005-08-02/images/lastnodeline.gif"border=0 align="absmiddle"IMG src="/htmldata/2005-08-02/images/close.gif "border=0 align="absmiddle"}s += "tr id=""+id[k]+"" value="+i+"td "+id[k+2]+"/tdtd"+tree_ar[i]+"/td/tr // // 构造节点,注意这里的自定义属性value。

Bootstrap框架建立树形菜单(Tree)的实例代码

Bootstrap框架建立树形菜单(Tree)的实例代码

Bootstrap框架建⽴树形菜单(Tree)的实例代码这⾥的Tree指的是树形菜单,这篇⽂章通过⼀个实例来讲解⼀下,在Bootstrap框架下怎么去建⽴⼀个树形菜单。

前提:先添加Bootstrap和JQ的引⽤<link rel="stylesheet" type="text/css" href="bootstrap-3.3.0-dist/dist/css/bootstrap.min.css" rel="external nofollow" ><script src="bootstrap-3.3.0-dist/dist/js/jquery-1.11.2.min.js"></script><script src="bootstrap-3.3.0-dist/dist/js/bootstrap.min.js"></script>HTML CODE<div class="tree well"><ul><li> <span><i class="icon-folder-open"></i> 廊坊师范学院</span><ul><li> <span><i class="icon-minus-sign"></i> 教育学院</span><ul><li> <span><i class="icon-leaf"></i> 学前教育</span> </li></ul></li><li> <span><i class="icon-minus-sign"></i> 物电学院</span><ul><li> <span><i class="icon-leaf"></i> 电⽓⼯程技术</span> </li><li> <span><i class="icon-minus-sign"></i> 电⼦信息科学技术</span><ul><li> <span><i class="icon-minus-sign"></i> 电⼦⼀班</span><ul><li> <span><i class="icon-leaf"></i> 宋笑</span> </li><li> <span><i class="icon-leaf"></i> ⼆盟</span> </li></ul></li><li> <span><i class="icon-leaf"></i> 电⼦⼆班</span> </li></ul></li><li> <span><i class="icon-leaf"></i> 物理学</span> </li></ul></li></ul></li></ul></div>CSS CODE(为树形菜单添加样式,使其符合Bootstrap框架的风格).tree {min-height:20px;padding:19px;margin-bottom:20px;background-color:#fbfbfb;border:1px solid #999;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05)}.tree li {list-style-type:none;margin:0;padding:10px 5px 0 5px;position:relative}.tree li::before, .tree li::after {content:'';left:-20px;position:absolute;right:auto}.tree li::before {border-left:1px solid #999;bottom:50px;height:100%;top:0;width:1px}.tree li::after {border-top:1px solid #999;height:20px;top:25px;width:25px}.tree li span {-moz-border-radius:5px;-webkit-border-radius:5px;border:1px solid #999;border-radius:5px;display:inline-block;padding:3px 8px;text-decoration:none}.tree li.parent_li>span {cursor:pointer}.tree>ul>li::before, .tree>ul>li::after {border:0}.tree li:last-child::before {height:30px}.tree li.parent_li>span:hover, .tree li.parent_li>span:hover+ul li span {background:#eee;border:1px solid #94a0b4;color:#000}JS CODE<script type="text/javascript">//为节点添加展开,关闭的操作$(function(){$('.tree li:has(ul)').addClass('parent_li').find(' > span').attr('title', 'Collapse this branch');$('.tree li.parent_li > span').on('click', function (e) {var children = $(this).parent('li.parent_li').find(' > ul > li');if (children.is(":visible")) {children.hide('fast');$(this).attr('title', 'Expand this branch').find(' > i').addClass('icon-plus-sign').removeClass('icon-minus-sign'); } else {children.show('fast');$(this).attr('title', 'Collapse this branch').find(' > i').addClass('icon-minus-sign').removeClass('icon-plus-sign'); }e.stopPropagation();});});</script>效果:⼀棵符合Bootstrap风格的树就这么建造完成了,优点⾃不⽤说:整洁,美观。

Vue.js递归组件实现树形菜单

Vue.js递归组件实现树形菜单最近看了 Vue.js 的递归组件,实现了⼀个最基本的树形菜单。

main.js 作为⼊⼝:import Vue from 'vue'import main from './components/main.vue'new Vue({el: '#app',render: h => h(main)})它引⼊了⼀个组件 main.vue:<template><div><my-tree :data="theData" :name="menuName" :loading="loading" @getSubMenu="getSubMenu"></my-tree></div></template><script>const myData = [{id: '1',menuName: '基础管理',menuCode: '10'},{id: '2',menuName: '商品管理',menuCode: ''},{id: '3',menuName: '订单管理',menuCode: '30',children: [{menuName: '订单列表',menuCode: '31'},{menuName: '退货列表',menuCode: '32',children: []}]},{id: '4',menuName: '商家管理',menuCode: '',children: []}];const subMenuData1 = {parentId: '1',children: [{menuName: '⽤户管理',menuCode: '11'},{id: '12',menuName: '⾓⾊管理',menuCode: '12',children: [{menuName: '管理员',menuCode: '121'},{menuName: 'CEO',menuCode: '122'},{menuName: 'CFO',menuCode: '123'},{menuName: 'COO',menuCode: '124'},{menuName: '普通⼈',menuCode: '124'}]},{menuName: '权限管理',menuCode: '13'}]};const subMenuData2 = {parentId: '2',children: [{menuName: '商品⼀',menuCode: '21'},{id: '22',menuName: '商品⼆',menuCode: '22',children: [{menuName: '⼦类商品1',menuCode: '221'},{menuName: '⼦类商品2',menuCode: '222'}]}]};import myTree from './common/treeMenu.vue'export default {components: {myTree},data () {return {theData: myData,menuName: 'menuName', // 显⽰菜单名称的属性loading: false}},methods: {getSubMenu (menuItem, callback) {this.loading = true;if (menuItem.id === subMenuData1.parentId) {this.loading = false;menuItem.children = subMenuData1.children;callback(menuItem.children);}setTimeout(() => {if (menuItem.id === subMenuData2.parentId) {this.loading = false;menuItem.children = subMenuData2.children;callback(menuItem.children);}}, 2000);}}}</script>subMenuData1, subMenuData2 存放⼦菜单数据,可以从服务器获取,以实现动态加载。

树形菜单

树形菜单,熟悉Windows程序管理器的读者一定不会陌生。

单击项目左侧的+号,项目展开;再次单击,项目收缩。

读过很多篇有关树形菜单的JavaScript 实现方法,原理很简单,都是利用Style中display属性的控制。

笔者本文的重点并不侧重于此,倒是想谈一谈如何实现每一次从数据库中提取数据并动态更新树形菜单。

树形菜单主要用来导航。

网站有很多栏目,每个栏目下有很多子栏目,栏目经常变动,如增加新栏目,改变现有栏目名称,调整主次栏目之间关系等等,如果每一次都去改动页面代码,非常不便。

而且因为信息都存放在数据库中,动态实现变得可能和必要。

本文并不侧重理论,只是为大家提供自己的一段代码,和大家一起来探讨一下PHP实现问题。

为了便于说明,笔者对数据库作了一些改动,假设菜单字符串存放在menu表中,main字段存放主菜单字符串,sub字段存放子菜单字符串,subid字段存放子菜单标识。

<?php$DB = new My_DB();$DB->query("select subid, main from menu group by main order by subid"); while ($DB->next_record()){$Main[] = $DB->f("main");$Key[] = $DB->f("subid");}/*首先,连接数据库,查询所谓的栏目名称。

以上代码采用了PHPLib中的数据库函数,其中,$Main数组用来存放主菜单字符串,$Key数组用来存放子菜单关键字。

大家可以采用多种方法,因人而异*/for ($i=0;$i<COUNT($MAIN);$I++){$j=0;$DB->query("select sub, subid from menu where main='".$Main[$i]."'"); ////利用query查询出与当前主菜单匹配的所有子菜单字符串?>/*以下代码和HTML代码结合到一起,大家看起来可能会不习惯,但这样代码显得简洁多了。

java如何在在页面中实现树形菜单

在页面中树形菜单1、应用XTree树型控件(1)XTree树型控件xtree.js是Web开发中运用较多的一个树型控件。

其入门简单,功能强大,很多人在它的基础上开发出了自己的树型控件。

XloadTree也是公司的基于JavaScript的建立树型目录的开源产品,扩展性强,使用简单。

由于XloadTree是基于XmlHttp请求/响应模型,必须使用http协议访问代码才可以正确加载XML文件。

(2)下载XTree树型控件(编程方式的系统包)(3)下载XTree树型控件(XML文件方式的系统包、而且该XML文件可以是动态创建)2、xtree有两种使用模式其一为显示构造树,而其二为运用XML数据源,同时该XML数据源也可以动态在Servlet组件中创建。

3、显示构造树(可以参考systemManage/contentPage/leftMenu.jsp)(1)第一步需要引用其样式单文件<link href='<c:url value="/systemManage/cssStyle/xtree.css" />'rel="stylesheet" type="text/css">(2)第二步再引用 xtree.js 文件<script language="javascript" type="text/javascript"src='<c:url value="/systemManage/contentPage/xtree.js" />' ></script>(3)第三步编程WebFXTreeItem以产生出菜单var treeRoot = new WebFXTree('蓝梦BBS论坛后台管理菜单');var tree_userInfoManaeFolder = new WebFXTreeItem("用户信息管理")var forwardQueryUserInfoItem=new WebFXTreeItem("查询一般用户信息");forwardQueryUserInfoItem.action='<c:urlvalue="/adminForwordAction!forwardQueryRegisterUserInfo.action" />';forwardQueryUserInfoItem.target="mainFrame";tree_userInfoManaeFolder.add(forwardQueryUserInfoItem);var forwardQueryVIPUserInfoItem=new WebFXTreeItem("查询VIP用户信息"); forwardQueryVIPUserInfoItem.action='<c:urlvalue="/adminForwordAction!forwardQueryVIPUserInfo.action" />';forwardQueryVIPUserInfoItem.target="mainFrame";tree_userInfoManaeFolder.add(forwardQueryVIPUserInfoItem);var forwardShowRegisterUserInfoItem=new WebFXTreeItem("显示用户信息"); forwardShowRegisterUserInfoItem.action='<c:urlvalue="/adminForwordAction!forwardShowRegisterUserInfo.action" />';forwardShowRegisterUserInfoItem.target="mainFrame";tree_userInfoManaeFolder.add(forwardShowRegisterUserInfoItem);var forwardDeleteRegisterUserInfoItem=new WebFXTreeItem("删除用户信息"); forwardDeleteRegisterUserInfoItem.action='<c:urlvalue="/adminForwordAction!forwardDeleteRegisterUserInfo.action" />';forwardDeleteRegisterUserInfoItem.target="mainFrame";tree_userInfoManaeFolder.add(forwardDeleteRegisterUserInfoItem);treeRoot.add(tree_userInfoManaeFolder);document.write(treeRoot);(4)执行后将产生出下面的效果4、运用XML数据源但XML文件的内容是静态的(可配置的形式)(1)添加tree.dtd文件设计其内容(2)设计XML数据源文件设计其内容(3)编程该xLoadtree菜单●第一步需要引用其样式单文件<link href='<c:url value="/systemManage/cssStyle/xtree.css" />'rel="stylesheet" type="text/css">●第二步再引用 xtree.js 、xloadtree.js和xmlextras.js文件<script language="javascript" type="text/javascript"src='<c:url value="/systemManage/contentPage/xloadtree.js" />' > </script><script language="javascript" type="text/javascript"src='<c:url value="/systemManage/contentPage/xmlextras.js" />' > </script>●第三步编程WebFXLoadTree以产生出菜单var menuTree = new WebFXLoadTree("蓝梦BBS论坛后台管理菜单","leftMenu.xml");document.write(menuTree);(4)执行后将产生出下面的效果5、由Servlet动态产生出XML文件内容(可以产生动态树)(1)设计一个产生出XML文件内容的Servlet(2)添加一个JDomXMLMenuBean(3)在页面中向Servlet进行请求var menuTree = new WebFXLoadTree("蓝梦BBS论坛后台管理菜单",'<c:url value="/leftmenuservlet" />'); document.write(menuTree);(4)执行后的结果为。

JSP中的一个树型结构

JSP中的⼀个树型结构看⽅⼒勋的javaWeb,采⽤左右值来表⽰树型结构(就是俺门的多级分类)表结构页⾯代码<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@taglib uri="/jsp/jstl/core" prefix="c" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>树状结构</title><script src="${pageContext.request.contextPath }/js/xtree.js"></script><link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/css/xtree.css"></head><body><script type="text/javascript"><c:forEach var="c" items="${list}"><c:if test="${c.depth==1}">var tree = new WebFXTree('${}');tree.target="right";tree.action = "${pageContext.request.contextPath}/servlet/AddChildServlet?id=${c.id}";</c:if><c:if test="${c.depth==2}">var node${c.depth} = new WebFXTreeItem('${}');node${c.depth}.target="right";node${c.depth}.action = "${pageContext.request.contextPath}/servlet/AddChildServlet?id=${c.id}";tree.add(node${c.depth});</c:if><c:if test="${c.depth>2}">var node${c.depth} = new WebFXTreeItem('${}');node${c.depth}.target="right";node${c.depth}.action = "${pageContext.request.contextPath}/servlet/AddChildServlet?id=${c.id}"; node${c.depth-1}.add(node${c.depth});</c:if></c:forEach>document.write(tree);</script></body></html>View Code呈现后html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>树状结构</title><script src="/AAPlan/js/xtree.js"></script><link type="text/css" rel="stylesheet" href="/AAPlan/css/xtree.css"></head><body><script type="text/javascript">var tree = new WebFXTree('商品');tree.target="right";tree.action = "/AAPlan/servlet/AddChildServlet?id=1";var node2 = new WebFXTreeItem('平板电视');node2.target="right";node2.action = "/AAPlan/servlet/AddChildServlet?id=2";tree.add(node2);var node3 = new WebFXTreeItem('长虹');node3.target="right";node3.action = "/AAPlan/servlet/AddChildServlet?id=5";node2.add(node3);var node3 = new WebFXTreeItem('索尼');node3.target="right";node3.action = "/AAPlan/servlet/AddChildServlet?id=6";node2.add(node3);var node2 = new WebFXTreeItem('冰箱');node2.target="right";node2.action = "/AAPlan/servlet/AddChildServlet?id=3";tree.add(node2);var node3 = new WebFXTreeItem('西门⼦');node3.target="right";node3.action = "/AAPlan/servlet/AddChildServlet?id=7";node2.add(node3);var node2 = new WebFXTreeItem('笔记本');node2.target="right";node2.action = "/AAPlan/servlet/AddChildServlet?id=4";tree.add(node2);var node3 = new WebFXTreeItem('thinkpad');node3.target="right";node3.action = "/AAPlan/servlet/AddChildServlet?id=8";node2.add(node3);var node3 = new WebFXTreeItem('dell');node3.target="right";node3.action = "/AAPlan/servlet/AddChildServlet?id=9";node2.add(node3);document.write(tree);</script></body></html>View Code说明:1.根据上⾯的数据列表可以知道,某个node节点的⽗节点是最近⼀个depth⽐当前节点⼩⼀的节点,通过node${c.depth-1}.add(node${c.depth})可以将当前节点添加到最近⼀次定义的上层节点下(也就是⽗节点)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

<html>
<head>
<style>
#d1{
width:200;
height:400;
background-color:#cccccc;
border:2px solid black;
left:30;
top:30;
position:absolute;
}
#d1_head{
height:30;
background-color:blue;
color:white;
font-size:20pt;
}
#d1_body{
background-color:#cccccc;
}
.list li{list-style-type:none}
.image image:向下.png;
</style>
<script>
function doAction(index){
var obj = document.getElementById('u' + index);
if(obj.style.display == 'none'){
obj.style.display = 'block';
if(index=='1'){
document.getElementById("img1").src='向下.png';
}else{
document.getElementById("img2").src='向下.png';
}
}else{
obj.style.display = 'none';
if(index=='1'){
document.getElementById("img1").src='向右.png';
}else{
document.getElementById("img2").src='向右.png';
}
}
}
function test(){
var obj = document.getElementById('l1');
alert(obj.innerHTML);
}
</script>
</head>
<body style="font-size:20pt;">
<div id="d1">
<div id="d1_head">树形菜单</div>
<ul class="list">
<li>
<span onclick="doAction(1);"><img src="向右.png" id="img1"/>羽绒专区</span> </li>
<ul style="display:none;" id="u1">
<li><a href="#">羽绒服</a></li>
<li><a href="#">羽绒夹克</a></li>
</ul>
<li>
<span onclick="doAction(2);"><img src="向右.png" id="img2"/>靴子专区</span> </li>
<ul style="display:none;" id="u2">
<li><a href="#">雪地靴</a></li>
<li><a href="#">登山靴</a></li>
</ul>
</ul>
</div>
</div>
</body>
</html>
下载两个指向不同的小图标用于区分。

相关文档
最新文档