Struts2树形菜单的实现

本文介绍了一个使用Struts2实现的动态树状菜单示例,包括所需的配置文件、Action类、辅助页面及数据Bean等关键组件,并详细展示了web.xml、struts.xml等配置细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态树状菜单:地址栏访问方法http://127.0.0.1:8080/study3/tree/showDynamicTreeAction.action
具体需要如下文件:struts2的类库文件即与struts2相关的包文件,web.xml,struts.xml,动态树状菜单的显示页面treeExampleDynamic.jsp,
辅助显示页面:dynamicTreeSelect.jsp,动态Action类文件DynamicTreeSelectAction.java,
提供数据的Bean类文件:Category.java,
******************************************************************************
所需要的包文件如下:
******************************************************************************
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar

commons-logging-1.0.4.jar
freemarker-2.3.12.jar
ognl-2.6.11.jar
struts2-core-2.1.2.jar
xwork-2.1.1.jar
struts2-dojo-plugin-2.1.2.jar
******************************************************************************
web.xml配置文件
*****web.xml******************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <filter>
  <filter-name>struts2</filter-name>
  <filter-class>
  org.apache.struts2.dispatcher.FilterDispatcher
  </filter-class>
  </filter>
  <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
******************************************************************************

在此struts.xml配置文件中我将动态树状菜单以及动态Ajax树状菜单的配置内容写在了这一个
配置文件中,其中动态树状菜单需要的action有dynamicTreeSelectAction,showDynamicTreeAction
动态Ajax树状菜单需要的action有dynamicTreeSelectAction,showDynamicAjaxTreeAction,
getNodes,这两个实例共用了提供数据的bean类文件Category.java文件.同时它们共用了
dynamicTreeSelectAction,但用于显示的Action类文件分别用了自己的Action类文件.
******************************************************************************
*******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="default" extends="struts-default"
  namespace="/tree">
  <action name="dynamicTreeSelectAction"
  class="com.zhang.study3.DynamicTreeSelectAction">
  <result>/dynamicTreeSelect.jsp</result>
  </action>
  <action name="showDynamicTreeAction"
  class="com.zhang.study3.ShowDynamicTreeAction">
  <result>/treeExampleDynamic.jsp</result>
  </action>
  <action name="showDynamicAjaxTreeAction">
  <result>/treeExampleAjaxDynamic.jsp</result>
  </action>
  <action name="getNodes"
  class="com.zhang.study3.ShowAjaxDynamicTreeAction">
  <result type="freemarker">
  /treeExampleAjaxDynamic.ftl
  </result>
  </action>
  </package>
</struts>

******************************************************************************
********treeExampleDynamic.jsp***************************************************
<%@ page language="java" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
<html>
  <head>
  <title>Showcase - UI Tag Example - Tree Example (Dynamic)</title>
  <sx:head />
  </head>
  <body>
  <script language="JavaScript" type="text/javascript">
  dojo.event.topic.subscribe("treeSelected", function treeNodeSelected(node) {
  dojo.io.bind({
  url: "<s:url value='/tree/dynamicTreeSelectAction.action'/>?nodeId="+node.node.widgetId,
  load: function(type, data, evt) {
  var divDisplay = dojo.byId("displayId");
  divDisplay.innerHTML=data;
  },
  mimeType: "text/html"
  });
  });
</script>
  <div style="float: left; margin-right: 50px;">
  <sx:tree id="tree" rootNode="%{treeRootNode}"
  childCollectionProperty="children" nodeIdProperty="id"
  nodeTitleProperty="name" treeSelectedTopic="treeSelected">
  </sx:tree>
  </div>
  <div id="displayId">
  Please click on any of the tree nodes.
  </div>
  </body>
</html>
******************************************************************************
******dynamicTreeSelect.jsp***************************************************
<%@ page language="java" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
Id:<s:property value="%{nodeId}" /><br/>
Name:<s:property value="%{nodeName}" /><br/>
(注:此文件就这三行代码负责将你选择的树状菜单相应结点信息如节点Id值与节点名称显示
在.jsp页面上.)
******************************************************************************
用于生成树状菜单的Action类文件
******DynamicTreeSelectAction.java********************************************
package com.zhang.study3;

import com.opensymphony.xwork2.ActionSupport;
import com.zhang.study3.Category;
public class DynamicTreeSelectAction extends ActionSupport {

  private long nodeId;
  private Category currentCategory;

  public void setNodeId(long nodeId) {
  this.nodeId = nodeId;
  }
  public long getNodeId() {
  return nodeId;
  }

  public String execute() throws Exception {
  currentCategory = Category.getById(nodeId);
  return SUCCESS;
  }

  public String getNodeName() {
  return currentCategory != null ? currentCategory.getName() : "Node not found";
  }
}
******************************************************************************
提供数据的bean类文件
****Category.java*************************************************************
package com.zhang.study3;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Category {
  private static Map<Long, Category> catMap = new HashMap<Long, Category>();
  static {
  new Category(1, "省总公司",
  new Category(2, "地市1分公司",
  new Category(3, "桥东区办事处",
  new Category(4, "市场组"),
  new Category(7, "客服组"),
  new Category(8, "技术组")),
  new Category(9, "开发区办事处",
  new Category(10, "市场组"),
  new Category(11, "客服组"),
  new Category(12, "技术组"),
  new Category(13, "后勤组"))),
  new Category(14, "地市2分公司",
  new Category(15, "软件开发组"),
  new Category(16, "软件测试组"),
  new Category(17, "售后服务组"),
  new Category(18, "市场拓展组"),
  new Category(19, "财物组")));
  }
  public static Category getById(long id) {
  return catMap.get(id);
  }
  private long id;
  private String name;
  private List<Category> children;
  private boolean toggle;
  public Category(long id, String name, Category... children) {
  this.id = id;
  this.name = name;
  this.children = new ArrayList<Category>();
  for (Category child : children) {
  this.children.add(child);
  }
  catMap.put(id, this);
  }
  public long getId() {
  return id;
  }
  public void setId(long id) {
  this.id = id;
  }
  public String getName() {
  return name;
  }
  public void setName(String name) {
  this.name = name;
  }
  public List<Category> getChildren() {
  return children;
  }
  public void setChildren(List<Category> children) {
  this.children = children;
  }
  public void toggle() {
  toggle = !toggle;
  }
  public boolean isToggle() {
  return toggle;
  }
}
******************************************************************************
用于显示树状菜单的Action类文件
*****ShowDynamicTreeAction.java************************************************
package com.zhang.study3;

import com.opensymphony.xwork2.ActionSupport;
import com.zhang.study3.Category;
public class ShowDynamicTreeAction extends ActionSupport {

  public Category getTreeRootNode() {
  return Category.getById(1);
  }
}
致此动态树状菜单的实例已经完成,可以测试了.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值