【发布时间】:2015-05-21 03:48:10
【问题描述】:
我是 Java 新手。我正在从数据库表生成一个菜单栏,我能够生成三个级别的子菜单,但我想知道如果有一天我们决定添加一个级别怎么办。我知道我的菜单生成逻辑很糟糕,但我找不到在primefaces上生成孩子的逻辑。这是我查询的 sql 结果。任何人都可以帮助获得解决方案吗?或者有什么想法可以创建一个循环而不是重复 2 个查询?任何教程或任何源代码示例都将不胜感激。
这是我生成 3 级菜单的源代码
connexion c1 = new connexion();
Connection con = c1.getConnected();
PreparedStatement ps = con
.prepareStatement("SELECT * FROM menu_options where parent_option_id is null");
// get first level menu options from database
ResultSet result = ps.executeQuery();
while (result.next()) {
DefaultSubMenu firstSubmenu = new DefaultSubMenu(
result.getString("name"));
PreparedStatement ps2 = con
.prepareStatement("SELECT * FROM menu_options where parent_option_id="
+ result.getInt("id"));
// get menu second level options from database
ResultSet result2 = ps2.executeQuery();
DefaultMenuItem item = null;
while (result2.next()) {
PreparedStatement ps3 = con
.prepareStatement("SELECT * FROM menu_options where parent_option_id="
+ result2.getInt("id"));
// get menu third level options from database
ResultSet result3 = ps3.executeQuery();
int rowcount = 0;
if (result3.last()) {
rowcount = result3.getRow();
result3.beforeFirst();
}
if (rowcount == 0) {
item = new DefaultMenuItem(result2.getString("name"));
item.setUrl(result2.getString("url"));
item.setIcon("ui-icon-arrowreturnthick-1-e");
// item.setId("fils");
firstSubmenu.addElement(item);
} else {
DefaultSubMenu firstSubmenu2 = null;
firstSubmenu2 = new DefaultSubMenu(result2.getString("name"));
while (result3.next()) {
item = new DefaultMenuItem(result3.getString("name"));
item.setUrl(result3.getString("url"));
item.setIcon("ui-icon-arrowreturnthick-1-e");
// item.setId("fils");
firstSubmenu2.addElement(item);
}
firstSubmenu.addElement(firstSubmenu2);
}
}
menu.addElement(firstSubmenu);
}
【问题讨论】:
-
好吧,我知道我要实现一个递归方法,你能不能给我一个例子,而不是扮演堆栈溢出总裁的角色。
-
好吧,对不起,我不是在寻找如何去做,而是关于如何根据我的源代码实现它的想法,我知道我必须使用递归方法,但如何去做,我不知道,我试过了,但没有成功,这就是我在这里发帖的原因
标签: java mysql jsf jsf-2 primefaces