Topic: 实现一个菜单树形结构 |
Print this page |
1.实现一个菜单树形结构 | Copy to clipboard |
Posted by: wz_gu Posted on: 2004-12-06 16:55 实现一个菜单树形结构,大家知道,树形分根,枝,叶,叶子就是下面没有了任何元素,而枝就是下面可能有枝或叶。 1 首先,菜单的层次不清楚,也就是说,多少层不知道。 2 数据存放在数据库中,要从数据库中读取出数据后,在页面中以树形显示出来 3 在数据库中,菜单编码如下:顶级001,然后下一级001001,然后是001002,顶级002,下一级002001,下一级002002,如果002002下面还有,就是002002001,在一条记录中,除了自己的菜单号,还有自己上一级的菜单号。例如:如果是002002001,那它的上一级菜单的ID就是002002。 请各位给一个思路:我已经将所有的菜单遍历出来,但是就是不能以树形显示出来,这个树形应该如何实现? hibernate 2.1.6,win2000,eclipse,sqlserver2000 |
2.Re:实现一个菜单树形结构 [Re: wz_gu] | Copy to clipboard |
Posted by: 256456 Posted on: 2004-12-07 09:02 不要通过编码方式确定树型结构,通过父子列的关系建立树型结构,而且只需要有父子关系就可以建立,为了以后使用的方便,也可以再加上层次和是否是leaf的字段!! |
3.Re:实现一个菜单树形结构 [Re: 256456] | Copy to clipboard |
Posted by: wz_gu Posted on: 2004-12-07 16:21 请大家不要说什么重新设计,改良什么的,我现在就是这个问题,设计已经完成了,又不是我说了算,况且如果重新来,谁也没有时间。所以就事论事,这个问题如何解决? |
4.Re:实现一个菜单树形结构 [Re: wz_gu] | Copy to clipboard |
Posted by: wz_gu Posted on: 2004-12-08 13:56 树形问题已解决,心中真的是无比愉快!这大概就是编程的快乐吧! |
5.Re:实现一个菜单树形结构 [Re: wz_gu] | Copy to clipboard |
Posted by: jsp168 Posted on: 2004-12-09 12:46 请问wz_gu你是如何解决的?是用什么思路? 分享下你的快乐。。。。 |
6.Re:实现一个菜单树形结构 [Re: wz_gu] | Copy to clipboard |
Posted by: jsp168 Posted on: 2004-12-09 12:48 我现在这样的思路: 是根据菜单编码的长度而生成树形 |
7.Re:实现一个菜单树形结构 [Re: wz_gu] | Copy to clipboard |
Posted by: wz_gu Posted on: 2004-12-09 13:09 用递归,然后对每层进行编排,形成树形就好了。 |
8.Re:实现一个菜单树形结构 [Re: wz_gu] | Copy to clipboard |
Posted by: supertom Posted on: 2004-12-14 11:23 这种问题应该形成一种通用的解决方案,比如说,给你一个Model(形成Layout用的), 再给你一个树型结构的Data Manager,你就可以根据需要,对每一个节点定制最终的Layout,用Compiste解决这类问题应该是比较理想的解决方案,我这里有一些sample code,希望能起到抛砖引玉的效果: private boolean buildTableRows(TableCellModel model, TableDataManager data, Node node) { Vector rows = null; // set current node in global data manager setCurrentNodeInGlobalDataManager(node); // set current tabular row data, for more detail, please refer to TableDataManager. String[] curRowData = (String[])data.getTabularData(node,false).get(0); setCurrentTabularRowData(curRowData); int curLevel = data.getCurrentLevel(node); if(data.isLeafNode(node)) { return processLeafNode(model, data, node); } else { if(data.isRootNode(node)) { rows = model.getHeaderRows(); addRows(rows); } else { rows = model.getBreakRows(curLevel); addRows(rows); } //If all children is handled, then the parent is handled. Node firstChild = node.getFirstChild(); Node tempNode = firstChild; buildTableRows(model, data, tempNode); while((tempNode = tempNode.getNextSibling()) != null) { buildTableRows(model, data, tempNode); } addSummaryRows(node); } return true; } private boolean processLeafNode(TableCellModel model, TableDataManager data, Node node) { int curLevel = data.getCurrentLevel(node); TabularData tabular = (TabularData)data.getTabularData(node, true); // set current row setCurrentTabularRowData((String[])tabular.get(0)); /** getRows(level,detailOnly) - return rows whose break level’s absolute value * equal to the first parameter. */ Vector rows = model.getRows( curLevel, false); // vTableRows - final table rows of layout manager. addRows( rows ); for(int i = 1 ; i < tabular.getRowCount() ; i++) { setCurrentTabularRowData((String[])tabular.get); rows = model.getRows( curLevel, true); addRows( rows ); } addSummaryRows(node); return true; } 大概情况是这样,等过一段时间有空,确实可以考虑一下将它形成具体的解决方案。 |
9.Re:实现一个菜单树形结构 [Re: supertom] | Copy to clipboard |
Posted by: wz_gu Posted on: 2004-12-14 14:06 to:supertom 一看你就是高手,懂design pattern的一定不是菜鸟,我也听说过,Compiste是做树形最好的模式,谢谢指点! |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |