Boa tarde a todos,
Estou fazendo um menu dinamico q devolve um XML para o Flex.
Os metodos abaixo montam esse XML.
Quando um pai tem somente um filho, ok, funciona.
Mas quando um filho tem netos e bisnetos, nao dá!
Observe que tive que colocar os resultSet em um List, pois a conn nao tava deixando duas ou mais resultset sendo executadas.
Alguem tem alguma ideia?
public String getTreeXML() {
String no = "<node label = 'Menu Minetrack'>";
try {
rs = stm.executeQuery("SELECT men.id_menu, men.menu_codpai, men.com_cod, men.nome, men.descricao FROM dbo.sdp_menu as men LEFT JOIN sdp_componentes as com ON com.id_com = men.com_cod WHERE menu_codpai = 0 ORDER BY men.nome");
List<MenuVO> lstMenu = new ArrayList<MenuVO>();
while(rs.next()) {
MenuVO mnu = new MenuVO();
mnu.setId_menu(rs.getInt("id_menu"));
mnu.setMenu_codpai(rs.getInt("menu_codpai"));
mnu.setCom_cod(rs.getInt("com_cod"));
mnu.setDescricao(rs.getString("descricao"));
mnu.setNome(rs.getString("nome"));
lstMenu.add(mnu);
}
for(int i = 0; i < lstMenu.size(); i++) {
String nome = lstMenu.get(i).getNome().trim();
String descricao = lstMenu.get(i).getDescricao().trim();
int id_menu = lstMenu.get(i).getId_menu();
int menu_codpai = lstMenu.get(i).getMenu_codpai();
int com_cod = lstMenu.get(i).getCom_cod();
if (com_cod == 0) {
no += "<node label = '" + nome + "' codigo = '" + id_menu
+ "' menu_codpai = '" + menu_codpai + "' nome = '"
+ nome + "' descricao = '" + descricao + "' >";
no += this.getTreeFilhos(id_menu);
no += "</node>";
} else {
no += "<node label = '" + nome + "' codigo = '" + id_menu
+ "' menu_codpai = '" + menu_codpai + "' nome = '"
+ nome + "' descricao = '" + descricao + "' >";
}
// no += "</node>";
}
} catch (SQLException e) {
e.printStackTrace();
}
no += "</node>";
System.out.println("Pai = " + no);
return no;
}
public String getTreeFilhos(int cod) {
String no = "";
try {
rs = stm.executeQuery("SELECT men.id_menu, men.menu_codpai, men.com_cod, men.nome, men.descricao FROM dbo.sdp_menu as men LEFT JOIN sdp_componentes as com ON com.id_com = men.com_cod WHERE menu_codpai = "
+ cod + " ORDER BY men.nome");
lstMenuFilhos = new ArrayList<MenuVO>();
while(rs.next()) {
MenuVO mnu = new MenuVO();
mnu.setId_menu(rs.getInt("id_menu"));
mnu.setMenu_codpai(rs.getInt("menu_codpai"));
mnu.setCom_cod(rs.getInt("com_cod"));
mnu.setDescricao(rs.getString("descricao"));
mnu.setNome(rs.getString("nome"));
lstMenuFilhos.add(mnu);
}
if(rs.next()) {
lstMenuFilhosG.addAll(0, lstMenuFilhos);
}
for(int i = 0; i < lstMenuFilhos.size(); i++) {
String nome = lstMenuFilhos.get(i).getNome().trim();
String descricao = lstMenuFilhos.get(i).getDescricao().trim();
int id_menu = lstMenuFilhos.get(i).getId_menu();
int menu_codpai = lstMenuFilhos.get(i).getMenu_codpai();
int com_cod = lstMenuFilhos.get(i).getCom_cod();
if (com_cod == 0) {
no += "<node label = '" + nome + "' codigo = '" + id_menu
+ "' menu_codpai = '" + menu_codpai + "' nome = '"
+ nome + "' descricao = '" + descricao + "' >";
no += this.getTreeFilhos(id_menu);
//no += "</node>";
} else {
no += "<node label = '" + nome + "' codigo = '" + id_menu
+ "' menu_codpai = '" + menu_codpai + "' nome = '"
+ nome + "' descricao = '" + descricao + "' >";
}
no += "</node>";
}
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("Filho = " + no);
return no;
}