java根据数据库生成菜单(递归)

菜单为:基本信息酒店管理服务商管理产品信息导游管理物品管理数据库字段已定。。不止两级。。也许是基本信息/酒店管理/客房管理/../../..要排序可以根据name字段进行... 菜单为:
基本信息
酒店管理
服务商管理
产品信息
导游管理
物品管理
数据库字段已定。。
不止两级。。也许是 基本信息/酒店管理/客房管理/../../..
要排序可以根据name字段进行排序。就这些字段。
Menu.java字段
private String url;
private Menu parent;
private List<Menu> subMenu;
Action.java里:
public void getMenus() {
List<Menu> listDetail = menuService.getItems();
Menu root=new Menu();
for (Menu menu : listDetail) {
String[] str = menu.getName().split("/");
//这里开始如何写(Map??)
}
}
public Menu createNode(String[] str, int index) {
if (index == str.length - 1) {
Menu menu = new Menu(str[index]);
return menu;
} else {
Menu menu = new Menu(str[index]);
Menu subMenu = createNode(str, index + 1);
menu.addSubMenu(subMenu);
return menu;
}
}
展开
 我来答
百度网友2339e95
2011-01-20 · TA获得超过765个赞
知道小有建树答主
回答量:515
采纳率:0%
帮助的人:743万
展开全部
不需要递归用一个特殊字符的算法来处理
比如
基本信息 1000
酒店管理 10001000
服务商管理 10002000
产品信息 2000
导游管理 20001000
物品管理 20002000
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-07-12
展开全部
<script language="javascript">
function ClickMenu(diving,plusing,num)
{
//alert(diving);
if(document.getElementById(diving).style.display=="none")
{
document.getElementById(diving).style.display='block';
if(plusing=="plus")
{
document.getElementById(plusing+num).src="minus.gif";//_
}
else if(plusing=="nolines")//全部占线
{
document.getElementById(plusing+num).src="minus_nolines.gif";//+
}
else if(plusing=="bottom")//-
{
document.getElementById(plusing+num).src="minus_bottom.gif";
}
document.getElementById("open"+num).src="close.gif";//关闭
}
else
{
document.getElementById(diving).style.display='none';//什么也没有
if(plusing=="plus")
{
document.getElementById(plusing+num).src="plus.gif";//+
}
else if(plusing=="nolines")//无下划线
{
document.getElementById(plusing+num).src="plus_nolines.gif";
}
else if(plusing=="bottom")
{
document.getElementById(plusing+num).src="plus_bottom.gif";
}
document.getElementById("open"+num).src="open.gif";
}
}
function ChangeColora(obj)
{
obj.className='Node-selected';
}
function ChangeColorb(obj)
{
obj.className='Node-unselect';
}

</script>
<body>
<% GetUserName("admin"); %>
</body>
</html>

private void ptberu()
{
htmlr = "<ul>";
string sqlstr = "SELECT MENU_ID,TOP_MENU_ID,MENU_NAME,MENU_PATH FROM [TB_BG_MENU] WHERE MENU_LEVEL=1";
DataTable dt = db.GetDataSet(sqlstr).Tables[0];
for (int i = 0; i < dt.Rows.Count; i++)//循环判断首节点
{
string bigClass = dt.Rows[i]["MENU_NAME"].ToString();
int ParentID = Convert.ToInt32(db.GetDataSet(sqlstr).Tables[0].Rows[i]["MENU_ID"].ToString());
htmlr += "<li class='explode' name='menu'><a href='BgMain.aspx?type=" + ParentID + "' target='bgMainFrame'>" + bigClass + "</a>";
sonPhtion(ParentID);
htmlr += "</li>";
}
htmlr += "</ul>";
}
private void sonPhtion(int ParentID)
{
string sontab = "SELECT MENU_ID,TOP_MENU_ID,MENU_NAME,MENU_PATH FROM [TB_BG_MENU] WHERE TOP_MENU_ID='" + ParentID + "'";
DataTable tabson = db.GetDataSet(sontab).Tables[0];
if (tabson.Rows.Count > 0)
{
htmlr += "<ul>";
for (int j = 0; j < tabson.Rows.Count; j++)//循环判断子节点
{
string smallName = tabson.Rows[j]["MENU_NAME"].ToString();
int samllNum = Convert.ToInt32(tabson.Rows[j]["MENU_ID"].ToString());
htmlr += "<li class='menu-item'><a href='BgMain.aspx?type=" + samllNum + "' target='bgMainFrame'>" + smallName + "</a>";
sonPhtion(samllNum);
htmlr += "</li>";
}
htmlr += "</ul>";
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
可悲的IT人
2011-01-21 · 超过17用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:0
展开全部
如果你想完成,请帖出你的数据库表的设计。必须获得你menu 对象的数据结构才能确定怎么去去写。 建议:用HashMap 保存菜单结构信息,这样可以减少循环比较时对象转化的次数大大提高了生成速度。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梵天弘业T2
2011-01-21 · TA获得超过2140个赞
知道小有建树答主
回答量:1305
采纳率:0%
帮助的人:970万
展开全部
表少了两个字段,深度(depth),次序(orderValue),次序值是输入的随意的整数,排序就可以了,细节就不说了,把这两个字段加上,你再思考下吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
glcword
2011-01-25 · 超过25用户采纳过TA的回答
知道答主
回答量:98
采纳率:0%
帮助的人:71.7万
展开全部
用jquery和json来实现
js是最重要的一步,控制菜单的显示效果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式