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;
}
} 展开
基本信息
酒店管理
服务商管理
产品信息
导游管理
物品管理
数据库字段已定。。
不止两级。。也许是 基本信息/酒店管理/客房管理/../../..
要排序可以根据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;
}
} 展开
5个回答
展开全部
不需要递归用一个特殊字符的算法来处理
比如
基本信息 1000
酒店管理 10001000
服务商管理 10002000
产品信息 2000
导游管理 20001000
物品管理 20002000
比如
基本信息 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>";
}
}
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>";
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果你想完成,请帖出你的数据库表的设计。必须获得你menu 对象的数据结构才能确定怎么去去写。 建议:用HashMap 保存菜单结构信息,这样可以减少循环比较时对象转化的次数大大提高了生成速度。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
表少了两个字段,深度(depth),次序(orderValue),次序值是输入的随意的整数,排序就可以了,细节就不说了,把这两个字段加上,你再思考下吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用jquery和json来实现
js是最重要的一步,控制菜单的显示效果
js是最重要的一步,控制菜单的显示效果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询