Boa tarde pessoal! Estou com um problema meio complicado aqui, mas acredito que seja só questão de lógica! Já tentei resolver mas não to conseguindo, por isso estou recorrendo á comunidade! =D hehe
O contexto é o seguinte, estou querendo inserir na tela de um projeto Web, um componente chamado “Tree”, pra quem não sabe, é aquele que nós usamos para navegar nas pastas do Windows Explorer, com aquele [+] que expande a pasta e tal…bom, o front-end é em Flex, e o Back-end em Java, usando o BlazeDS como ponte…em relação a essa configuração, está tudo certo! Estou trocando vários objetos e consultas entre eles e ta td OK!
Então vamos lá…no flex eu só preciso passar um ArrayCollection pra esse componente “Tree”, que ele se vira, monta os diretórios pais e filhos… só que esse Array tem que estar construido de uma forma especifica, ele tem que conter Array’s dentro de outro Array, um ArrayPai.add(ArrayFilho) teoricamente. E eu to montando esse array no java, e é ai que eu to errando na lógica…
- Tenho uma tabela chamada Menu no meu banco indicando quem é filho de quem por id, e quem é pai tem o valor do id = 0:
Vou passar a parte da minha classe que traz os diretórios do banco, faz a consulta, e (tenta) trata o Array que irá pro Flex:
*Se precisarem de alguma outra parte do código é só pedir!!
//--Classe MedicoService.java
public ArrayList<Menu> montaTree(){
ArrayList<Menu> array = new ArrayList<Menu>();
Connection con = FabricaConexao.getConexao();
String sql = "select * from menu";
try{
PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()){
Menu m = new Menu(0,null,null);
m.setIdmenu(rs.getInt("idmenu"));
m.setDescricao((rs.getString("descricao")));
m.setIdpai(rs.getInt("idpai"));
array.add(m);
}
con.close();
rs.close();
}catch(SQLException e){
e.printStackTrace();
}
return array;
}
//----------------------------------------------Método em que estou com duvida:-----------------
public ArrayList<Menu> montaMenu(){
ArrayList<Menu> menu = new ArrayList<Menu>();
ArrayList<Menu> pai = new ArrayList<Menu>();
ArrayList<Menu> filho = new ArrayList<Menu>();
ArrayList<Menu> monta = new ArrayList<Menu>();
ArrayList<Menu> root= new ArrayList<Menu>();
menu = montaTree();
for(Menu bean : menu) {
if(bean.getIdpai()==0){
pai.add(bean);
}
if(bean.getIdpai()!=0){
filho.add(bean);
}
}
for(Menu p : pai){
for(Menu f : filho) {
if(f.getIdpai() == p.getIdmenu()){
Menu m = new Menu(0,null,null);
m.setDescricao(f.getDescricao());
m.setIdmenu(f.getIdmenu());
monta.add(m);
root.add(new Menu(p.getIdmenu(),p.getDescricao(),monta));
}
}
}
return root;
}
O método montaMenu() que ta errado…a lógica e tal…ele retorna um Array chamado “root” que é o que o flex ta pegando. Preciso de uma força de voces pra desencadear as ideias ai…
Eu criei uma classe “Bean” chamada “Menu” que vai passar no construtor alguns parametros e entre eles o mais importante, um ArrayCollection, pois foi só assim que eu conseguir colocar um dentro de outro…
Seria essa aqui:
public class Menu {
int idmenu;
int idpai;
String descricao;
ArrayList<Menu> menu;
public Menu(int idpai, String descricao, ArrayList<Menu> menu) {
super();
this.idpai = idpai;
this.descricao = descricao;
this.menu = menu;
}
public int getIdmenu() {
return idmenu;
}
public void setIdmenu(int idmenu) {
this.idmenu = idmenu;
}
public int getIdpai() {
return idpai;
}
public void setIdpai(int idpai) {
this.idpai = idpai;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
}
Bom…a idéia é fazer o “Tree” funcionar com um ArrayCollection msm, tem como fazer ele no flex usando mas pro meu caso eu preciso mto dele como ArrayCollection vindo do java…
Então galera…onde eu estou errando?