Menu Dinamico

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;



}