系统采用Struts2+Spring+Hibernate架构,classpath分层结构如下图:
表结构如下图:
表映射为pojo为类Tree.java代码如下:
private Integer id;
private String name;
private String children;
private Tree parent;
public Tree() {
}
public Tree(Integer id, String name, String children) {
this.id = id;
this.name = name;
this.children=children;
}
public Tree(Integer id, String name, String children, Tree parent) {
this.id = id;
this.name = name;
this.children = children;
this.parent = parent;
}
//省略get,set }
Hibernate映射文件tree.hbm.xml
<hibernate-mapping>
<class name="zoboya.Tree" table="tree" >
<id name="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="name" type="string">
<column name="name" length="255" />
</property>
<property name="children" type="string">
<column name="children" length="255" />
</property>
<many-to-one name="parent" class="zoboya.Tree" fetch="select">
<column name="parentid" not-null="true" />
</many-to-one>
</class>
</hibernate-mapping>
TreeDao.java代码如下:
public class TreeDAO extends HibernateDaoSupport implements ITreeDAO {
private static final Log log = LogFactory.getLog(TreeDAO.class);
public Tree findById(java.lang.Integer id) {
log.debug("getting Tree instance with id: " + id);
try {
Tree instance = (Tree) getSession().get("zoboya.Tree", id);
return instance;
} catch (RuntimeException re) {
log.error("get failed", re);
throw re;
}
}
//其它方法省略
}
节点类,Category
public class Category
{
//保存了所有节点数据的Map
private static Map<Long, Category> catMap = new HashMap<Long, Category>();
//用作节点的id
private long id;
//用作节点的标题
private String name;
//包含子节点对象的列表
private List<Category> children;
public static Category getById(long id)
{
return catMap.get(id);
}
public Category(long id, String name,List<Category> children){
this.id=id;
this.name=name;
this.children=children;
catMap.put(id, this);
}
public Category(long id, String name, Category... children)
{
this.id = id;
this.name = name;
//初始化Category对象的children属性,并放入子对象
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;
}
}
Service层的类TreeService
public class TreeService implements ITreeService {
private ITreeDAO treeDao;
public ITreeDAO getTreeDao() {
return treeDao;
}
public void setTreeDao(ITreeDAO treeDao) {
this.treeDao = treeDao;
}
//递归方法
public Category createTree(Tree tree){
System.out.println("Name= "+tree.getName());
//如果有儿子就循环调用自己去找,把找到的所有儿子生成一个list作为children加入到父中
List<Category> children=new ArrayList<Category>();
if (tree.getChildren()!=null) {
String[] childrenId=tree.getChildren().split(",");
for (int i = 0; i < childrenId.length; i++) {
//递归
Tree branch=treeDao.findById(Integer.parseInt(childrenId[i]));
Category child = createTree(branch);
children.add(child);
}
}
Category me=new Category(tree.getId(),tree.getName(), children);
return me;
}
}
Action
public class ShowDynamicTreeAction extends ActionSupport
{
private static final long serialVersionUID = 7437613038859411044L;
private ITreeService treeService;
private Category category;
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
@Override
public String execute() throws Exception {
this.category =this.getTreeRootNode();
return SUCCESS;
}
public void setTreeService(ITreeService treeService) {
this.treeService = treeService;
}
public Category getTreeRootNode()
{ Tree tree=new Tree(0,"ZH根目录","1,5"); //选择构造一个根目录,其子目录用逗号隔开!
System.out.println("开始递归!");
return treeService.createTree(tree);
}
}
在applicationContext.xml文件中加入
<!-- DAO -->
<bean id="treeDao" class="zoboya.struts2.dao.TreeDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<!-- Services -->
<bean id="treeService" class="zoboya.struts2.service.TreeService">
<property name="treeDao">
<ref bean="treeDao"/>
</property>
</bean>
<!-- Action -->
<bean id="treeAction" class="zoboya.struts2.action.ShowDynamicTreeAction" singleton="false">
<property name="treeService">
<ref bean="treeService"/>
</property>
</bean>
在struts.xml中加入
<action name="showDynamicTreeAction"
class="treeAction">
<result>/ajaxTags/treeTag/treeExampleDynamic.jsp</result>
</action>
部署后访问以下地址就可以看到动态树了
http://localhost:8080/项目名/ajaxTags/treeTag/showDynamicTreeAction.action
分享到:
相关推荐
Struts2-showcase是一个用于演示和学习Apache Struts2框架功能的开源项目。这个压缩包“struts2-showcase.rar”包含了完整的源代码,旨在帮助开发者深入理解Struts2框架的工作原理及其各种特性。以下是对Struts2和...
struts2-showcase-2.1.8.1.warstruts2-showcase-2.1.8.1.warstruts2-showcase-2.1.8.1.warstruts2-showcase-2.1.8.1.warstruts2-showcase-2.1.8.1.war
在Struts2应用中使用jQuery Grid,可以轻松地处理服务器端的数据,实现动态加载和异步更新,提高数据展示的效率和用户体验。 `struts2-jquery-showcase-3.3.0.zip`可能包含了更多的jQuery插件示例,比如对话框、...
在本文中,我们将深入探讨如何使用Struts2的`ModelDriven`接口以及如何控制URL,以实现`struts2-rest-showcase-2.1.8.war`项目中的功能。 首先,`ModelDriven`接口是Struts2提供的一种设计模式,用于将Action类与...
struts2-showcase.war
"struts2-bootstrap-showcase-1.5.2.zip"是一个整合了Struts2和Bootstrap的示例项目,它展示了如何在Struts2框架中使用Bootstrap库来创建具有现代界面的应用。 首先,Struts2标签库是Struts2框架的核心特性之一,它...
这个"struts2 的showcase"项目是Struts2官方提供的一个示例应用,它展示了Struts2框架的各种功能和特性,非常适合初学者学习和开发者参考。 首先,让我们深入了解Struts2的核心概念和主要特点: 1. **Action与...
Struts2是一个非常知名的Java Web开发框架,由Apache软件基金会维护。它基于MVC(Model-View-Controller)设计模式,极大地简化了Java Web应用程序的开发过程,提供了强大的功能和可扩展性。在标题和描述中提到的...
要求配置条件比较苛刻,同时,一些特定版本没有看到有沙盒绕过,所以,目前exp只是基于S2-045改写的,所以exp并不是所有版本都能用,正常情况下Struts 2.3.5-2.3.31,Struts 2.5-2.5.10版本可以使用此exp。...
struts2.0自带,不错的例子哦.
在Struts 2中,OGNL被用来解析和执行用户的输入,以动态生成视图或者执行业务逻辑。然而,如果没有正确地限制用户输入,攻击者可以通过OGNL表达式注入恶意代码,进而执行任意系统命令。 为了理解这个问题,我们首先...
增加S2-048 Struts 2.3.X 支持检查官方示例struts2-showcase应用的代码执行漏洞,参考地址:http://127.0.0.1:8080/struts2-showcase/integration/saveGangster.action
要求配置条件比较苛刻,同时,一些特定版本没有看到有沙盒绕过,说以,目前exp只是基于S2-045改写的,所以exp并不是所有版本都能用,正常情况下Struts 2.3.5-2.3.31,Struts 2.5-2.5.10版本可以使用此exp。...
Struts2和REST是两种广泛应用于Web开发的技术。Struts2是一个基于MVC(Model-View-Controller)架构模式的Java框架,它极大地简化了Java Servlet的开发,提供了丰富的功能来构建可维护、可扩展的Web应用程序。REST...
struts2.0官方项目之四(showcase) <br>=================================================== Struts2.0官方项目共4个,名字如下: <br>blank mailreader portlet showcase <br>这4个官方...
juery集成到struts2。这是其中的一个例子的源代码,好处在于你不仅看到了程序演示的效果,还可以在页面上看到实现相关功能的代码。
Struts2漏洞检查工具2019版 警告: 本工具为漏洞自查工具,请勿非法攻击他人网站! ==漏洞编号==============影响版本=========================官方公告==========================================影响范围====...
增加S2-048 Struts 2.3.X 支持检查官方示例struts2-showcase应用的代码执行漏洞,参考地址:http://127.0.0.1:8080/struts2-showcase/integration/saveGangster.action 2017-03-21: 增加S2-046,官方发布S2-046和S2...
在提供的版本struts-2.3.15.3中,有两个示例应用:struts2-blank.war是最简单的环境,而struts2-showcase.war则包含了许多常见案例,这两个war文件可以直接放入Tomcat的webapps目录下,系统会自动解压并可访问。...
《Android电视Leanback库组件展示:深入理解leanback-showcase开源项目》 在Android开发领域,尤其是针对电视应用开发,Android Leanback库扮演了至关重要的角色。它为开发者提供了优化的用户界面组件,使得在大...