首先,来建个树型表数据,网上google一击,差不多类似
/**
--树形菜单
节点编号
节点名称
节点链接址
些节点父节点
是否最底节点
节点排序(一般用在同级节点上)
节点说明
*/
drop table EPTreeTable
create table EPTreeTable
(
TreeNodeId int identity(1,1) constraint pk_TreeNode primary key,
TreeNodeName varchar(50) not null,
TreeNodeLink varchar(100) ,
TreeNodeFatherId int default 0, --0 为最高层
TreeNodeIsBottom bit default 1, --1 为底层 0为非底层
TreeNodeCompositor int default 1, -- 默认排在最后面
TreeNodeExplain varchar(200)
)
二、建立一个TO对象
package ep.pojo;
import java.io.Serializable;
/**
* @author fangbiao
* 树TO对象
*/
public class TreePojo implements Serializable{
/**
* 节点编号
*/
private int treeNodeId;
/**
* 节点名称
*/
private String treeNodeName;
/**
* 节点操作目的地
*/
private String treeNodeLink;
/**
* 父节点
*/
private int treeParentNodeId;
/**
* 是否底层节点
*/
private boolean treeNodeIsBottom;
/**
* 结点排序(同级)
*/
private int treeNodeCompositor;
/**
* 节点备注
*/
private String treeNodeExplain;
/**
* 节点权限
*/
private String treeNodeControl;
/**
* @return treeNodeControl
*/
public String getTreeNodeControl() {
return treeNodeControl;
}
/**
* @param treeNodeControl 要设置的 treeNodeControl
*/
public void setTreeNodeControl(String treeNodeControl) {
this.treeNodeControl = treeNodeControl;
}
/**
* @return treeNodeCompositor
*/
public int getTreeNodeCompositor() {
return treeNodeCompositor;
}
/**
* @param treeNodeCompositor 要设置的 treeNodeCompositor
*/
public void setTreeNodeCompositor(int treeNodeCompositor) {
this.treeNodeCompositor = treeNodeCompositor;
}
/**
* @return treeNodeExplain
*/
public String getTreeNodeExplain() {
return treeNodeExplain;
}
/**
* @param treeNodeExplain 要设置的 treeNodeExplain
*/
public void setTreeNodeExplain(String treeNodeExplain) {
this.treeNodeExplain = treeNodeExplain;
}
/**
* @return treeNodeId
*/
public int getTreeNodeId() {
return treeNodeId;
}
/**
* @param treeNodeId 要设置的 treeNodeId
*/
public void setTreeNodeId(int treeNodeId) {
this.treeNodeId = treeNodeId;
}
/**
* @return treeNodeIsBottom
*/
public boolean isTreeNodeIsBottom() {
return treeNodeIsBottom;
}
/**
* @param treeNodeIsBottom 要设置的 treeNodeIsBottom
*/
public void setTreeNodeIsBottom(boolean treeNodeIsBottom) {
this.treeNodeIsBottom = treeNodeIsBottom;
}
/**
* @return treeNodeLink
*/
public String getTreeNodeLink() {
return treeNodeLink;
}
/**
* @param treeNodeLink 要设置的 treeNodeLink
*/
public void setTreeNodeLink(String treeNodeLink) {
this.treeNodeLink = treeNodeLink;
}
/**
* @return treeNodeName
*/
public String getTreeNodeName() {
return treeNodeName;
}
/**
* @param treeNodeName 要设置的 treeNodeName
*/
public void setTreeNodeName(String treeNodeName) {
this.treeNodeName = treeNodeName;
}
/**
* @return treeParentNodeId
*/
public int getTreeParentNodeId() {
return treeParentNodeId;
}
/**
* @param treeParentNodeId 要设置的 treeParentNodeId
*/
public void setTreeParentNodeId(int treeParentNodeId) {
this.treeParentNodeId = treeParentNodeId;
}
}
三、建立一棵递归的树,网上资料也大部分是类似的,有的是js排序的,有的是数据库排序,我用的也是一种通用方法(此方法也是从网上参考而来,感谢那位兄弟)
我将提供两种方式,一是只读一次数据库,程序排序
//这就是only读一次数据
private List testList = null;
private int flag = 0;
public List getTestList(){
if(testList == null){
if(flag == 0){
flag = 1;
testList = itbs.getManagerTree();
return testList;
}
return testList;
}
return testList;
}
//对树列表数据(进行子树生成)
public List getChildrenList(TreePojo tp){
List list = getTestList();
int listLength = list.size();
List newReturnList = new ArrayList();
if(listLength == 0)
return newReturnList;
List leaveList = new ArrayList();
for(int i=0;i<listLength;i++){
TreePojo treePojo = (TreePojo)list.get(i);
int treePojoTreeParantNodeId = treePojo.getTreeParentNodeId();
int tpTreeNodeId = tp.getTreeNodeId();
if(treePojoTreeParantNodeId == tpTreeNodeId){
newReturnList.add(treePojo);
}else{
leaveList.add(treePojo);
}
}
list = leaveList;
return newReturnList;
}
//成生一棵树
private synchronized TreeNode doTurnToTree(TreePojo tp){
List list = getChildrenList(tp);
int treeLength = list.size();
TreeNodeBase personNode = null;
if(tp.getTreeParentNodeId() == 0){
//开始树
personNode = new TreeNodeBase("person",tp.getTreeNodeName(),false);
}else{
if(treeLength >0){
// 有子树
personNode = new TreeNodeBase("folder",tp.getTreeNodeName(),false);
}else{
// 叶子
personNode = new TreeNodeBase("document",tp.getTreeNodeName(),tp.getTreeNodeLink(),true);
}
}
Iterator iterator = list.iterator();
while(iterator.hasNext()){
TreePojo treePojo = (TreePojo)iterator.next();
personNode.getChildren().add(this.doTurnToTree(treePojo));
}
return personNode;
}
第一种方式OK!!
第二种方式就是把
List list = getChildrenList(tp);
改为
List list = itbs.getTree(tp);
这句是需要读取数据库的
刚好有事,明天续........
分享到:
- 2008-01-31 17:35
- 浏览 1932
- 评论(2)
- 论坛回复 / 浏览 (1 / 3223)
- 查看更多
相关推荐
本人用的是Myeclipse7.0+J2EE5.0+JSF开发,配置myfaces各种jar,包括上传.考到lib下就可以.哪里不明加我QQ问我 200808006
JSF及Myfaces帮助.CHM
MyFaces,jsf使用时用到的包,包括jstl的包,也包括了一些格式和模板文件,将jar放到lib下或者配置到环境中就可以直接使用了
深入讨论JSF中Tree2组件使用方法。
JSF分页组件2,JSF分页组件2
第2部分-动态JSF表单(CSS、JavaScript和JSF联合打造 Ajax应用程序).zip
JSF Web Apatch Myfaces
myfaces jsf tobago全部jar包 刚刚从网上下载下来。给初学着提供方便。
教你使用JSF和MyFaces实现文件上载。
JSF创建自定义组件
apache的jsf实现myfaces的组件开发过程
用eclipse 开发 JSF and MyFaces 类库
jsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSFjsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSF
jsf2.0源代碼(myfaces2.0.4 api+impl)
下了才知道他的好.jsf就是好呀,jsf就是好呀!!
JSF自定义组件学习的好教材
Struts+JSF+filter+Myfaces+A4j+Spring+hibernate+Mysql整合一个项目
jsf 1.2 myfaces1.2.7 richfaces3.3.1 facelets1.2 所有的最新包 让你一步到位,所有包测试过。可以兼容
jsf-api.jar与jsf-impl.jar import javax.faces.*类报红的原因就是使用jsf框架缺少jsfjar包,资源包含jsf必需的jar包
jsf2.1.0 jar包和原代码jsf2.1.0 jar包和原代码jsf2.1.0 jar包和原代码jsf2.1.0 jar包和原代码jsf2.1.0 jar包和原代码jsf2.1.0 jar包和原代码