先说下本项目使用struts2+hibernate+Extjs3.*
将整个项目搭建起来后,我的项目整体架构如下图片
其中一些配置很重要,只讲下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>
<include file="struts-default.xml"/><!--struts2原来就需要的xml文件 -->
<package name="json" extends="json-default"><!--使用Extjs时需要配置 -->
<action name="tree" class="com.tree.action.TreeAction" method="treeList">
<result type="json"><!--返回的数据类型为json格式 -->
<param name="root"><!--这个与页面的js root相对应不需要改动 -->
treeNodeList<!--树节点返回页面的List,与action里的List名字相同 -->
</param>
</result>
</action>
</package>
</struts>
环境搭建好了之后开始重要部分了。
页面代码:
<%@ 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>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css">
<script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ext/ext-all.js"></script>
<script type="text/javascript" src="ext/ext-lang-zh_CN.js"></script>
<script type="text/javascript">
Ext.onReady(function(){
var root = new Ext.tree.AsyncTreeNode( {
text : '根结点',
draggable : false,
id : '0'
});
var treeloader = new Ext.tree.TreeLoader({
dataUrl : 'tree.action'
});
var tree = new Ext.tree.TreePanel( {
rootVisible:true,
layout:'fit',
autoHeight:true,
width:100,
margins: '5 5 4 5',
autoScroll: true,
renderTo: 'tree', // Using this config, a call to render() is not required (在html中存在一个 id 为 tree 的结点)
animate: true,
enableDD: false,
title: '异步树',
root: root, // You must define the root variable before when you set the root config
loader:treeloader});
treeloader.on("beforeload", function(treeLoader, node) {
treeLoader.baseParams.id = node.id; //node.id为树节点的id,传给后台的参数
}, this);
});
</script>
</head>
<body>
<div id="tree"></div>
</body>
</html>
后台代码:Action
package com.tree.action;
import java.util.*;
import com.entity.Tree;
import com.opensymphony.xwork2.ActionSupport;
import com.tree.TreeNode;
import com.tree.dao.TreeDao;
public class TreeAction extends ActionSupport{
private List<TreeNode> treeNodeList;//返回到页面的List
private String id;//前台传过来的参数
public String treeList(){
List<Tree> treeList=TreeDao.queryList(id);
treeNodeList=new ArrayList<TreeNode>();
for(Tree tree:treeList){
TreeNode tn=new TreeNode();
tn.setId(Integer.toString(tree.getTreeId()));
tn.setHref("http://www.baidu.com?id="+tree.getTreeId());//设置链接和所需要传的参数
tn.setHrefTarget("rightFrame");
if(tree.getTreeParentId().equals("0")){
tn.setLeaf(false);
}else{
tn.setLeaf(true);
}
tn.setText(tree.getTreeName());
treeNodeList.add(tn);
}
return SUCCESS;
}
public List<TreeNode> getTreeNodeList() {
return treeNodeList;
}
public void setTreeNodeList(List<TreeNode> treeNodeList) {
this.treeNodeList = treeNodeList;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
用到的类:Tree
package com.entity;
/**
* Tree entity. @author MyEclipse Persistence Tools
*/
public class Tree implements java.io.Serializable {
// Fields
private Integer treeId;
private Integer treeNumber;
private String treeName;
private Integer treeParentId;
// Constructors
/** default constructor */
public Tree() {
}
/** full constructor */
public Tree(Integer treeNumber, String treeName, Integer treeParentId) {
this.treeNumber = treeNumber;
this.treeName = treeName;
this.treeParentId = treeParentId;
}
// Property accessors
public Integer getTreeId() {
return this.treeId;
}
public void setTreeId(Integer treeId) {
this.treeId = treeId;
}
public Integer getTreeNumber() {
return this.treeNumber;
}
public void setTreeNumber(Integer treeNumber) {
this.treeNumber = treeNumber;
}
public String getTreeName() {
return this.treeName;
}
public void setTreeName(String treeName) {
this.treeName = treeName;
}
public Integer getTreeParentId() {
return this.treeParentId;
}
public void setTreeParentId(Integer treeParentId) {
this.treeParentId = treeParentId;
}
}
TreeNode
package com.tree;
/**
* 树节点,暂时只列举了这些树节点属性
* @author huaye
*
*/
public class TreeNode {
private String text; //树节点显示的文本
private boolean isLeaf; //是否设置为叶子节点
private String hrefTarget;//在那个框架里面显示页面,写的是框架名
private String id; //节点id
private String href; //树节点的超链接,即url
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public boolean isLeaf() {
return isLeaf;
}
public void setLeaf(boolean isLeaf) {
this.isLeaf = isLeaf;
}
public String getHrefTarget() {
return hrefTarget;
}
public void setHrefTarget(String hrefTarget) {
this.hrefTarget = hrefTarget;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getHref() {
return href;
}
public void setHref(String href) {
this.href = href;
}
}
提下很重要的两个jar包,jsonplugin-0.34.jar Extjs与struts2所需要的
json-lib-2.4-jdk15.jar 将List转成JSON所必须的
分享到:
相关推荐
AJAX: 以JSON数据格式,使用ExtJS构造动态异步加载的树。
extjs异步树,多选树,json数据机构,集成spring,struts例子,extjs异步树,多选树,json数据机构,集成spring,struts例子,extjs异步树,多选树,json数据机构,集成spring,struts例子,extjs异步树,多选树,json...
说明:本例主要实现在树节点数据过多的情况下对数据进行异步请求,并且在请求数据返回前台的同时实现级联选择。使用ExtJs版本为4.1.1a,在struts2下测试通过。例子仅供提供思路,简单易懂,不负责代码优化,哈哈!
extjs4,当点击左边的树,右边会生成相应的面板,代码精简,欢迎大家来学习,有问题可以直接交流。
在家研究了一下extjs异步树,-每个节点都异步加载-前后台代码都有-附整个工程-运行通过-前台代码请看doctree.js,后台代码请看TreeService.java,运行环境:Myeclipse6.5+tomcat7.0.27
NULL 博文链接:https://lpcjrflsa.iteye.com/blog/1704537
extJs 2,异步树,ext2源程序,tree; 一个完整的extJs 2Tree 例子.
内涵ExtJs中多个异步树的例子,几乎涵盖CSDN中所有树的demo,部署后可运行。另外还有中文API。
extjs开发 数据库mysql 数据库文件在开发文档目录下 动态树形菜单的加载
使用extjs+ibatis+spring+struts开发的权限系统 数据库mysql 数据库文件在开发文档目录下 动态树形菜单的加载 ,用户角色权限菜单的维护 jar文件删了一些,需要用的自己加包
我们开发项目的时候,有的时候左边的树结点很多,虽然说有extjs有异步,但还是有结点下面有时长达500个以上,甚至更多,这个时候用分页可以解决这个问题
java写的Extjs异步树形控件示例,可直接部署
第二十五章:动态操作树节点 200 一、概述 200 二、基本操作 201 三、事件 203 四、小结 204 第二十六章:远程获取节点数据 205 一、 概述 205 二、异步加载解析 206 三、小结 212 第二十七章:选项卡面板——Ext....
当树节点较多的时候很好用,具体的可以下载下来试试
在我的随笔Extjs Tree + JSON + Struts2中我介绍了如何异步加载一个Extjs的树,但是很多网友留言说不能成功操作。现在我自己做了一个所有源代码的包,供大家下载。 有几点事项请大家注意 1、blogjava的文件上载要求...
用SSH为框架,前台用Extjs,数据以json格式封装,数据库采用mysql。有布局,有树形结构,有可编辑表单异步刷新,支持模糊查询。
从数据库获取构造树结构是ExtJS TreePanel的核心技术,常用方法是TreeStroe里配置proxy,这种方式的root成了一个不受控制的节点。 TreeStroe的root实际是一个层叠json数据,大部分情况是直接写一些简单数据,但在...
根据数据库数据生成json,然后动态生成树(异步),点击树,center内显示具体页面。很值得学习,我研究了半个多月才整出来
其中Ext.tree.TreeNode代表一个树节点,比较常用的属性包括text、id、icon、checked等、异步树Ext.tree.AsyncTreeNode、树加载器Ext.tree.TreeLoader。下面介绍Extjs 中的 Treepanel 实现菜单级联选中效果。 在 ...
并且以进销存管理平台的权限管理系统为切入点对系统运用的ExtJS技术和SSH2框架进行分析,在系统分析设计中展示ExtJS多级动态树结构如何在权限管理系统中应用并实现Ajax技术的异步加载树节点功能,并因此提高权限管理...