Mostrar Array de objetos dentro de outro Array de objetos

Boa tarde pessoALL

Estou novamente aqui, para ver se vcs conseguem me ajudar

tenho este BIN (menuPai)

public class MenuBin {
	private String mnupor;
	private String mnucod;
	private String mnutxt;
	private String mnuweb;
	private String mnurot;
	private ArrayList mnufil;
	
	public MenuBin() 	{
		this.mnupor  = null;
		this.mnucod  = null;
		this.mnutxt  = null;
		this.mnuweb  = null;
		this.mnurot  = null;
		this.mnufil  = null;

getter e setter ocultados...
}

tenho agora este outro bin (menuFilho)

public class MenuFilhoBin {
	private String mnufilpor;
	private String mnufilcod;
	private String mnufiltxt;
	private String mnufilweb;
	private String mnufilrot;

	public MenuFilhoBin() 	{
		this.mnufilpor  = null;
		this.mnufilcod  = null;
		this.mnufiltxt  = null;
		this.mnufilweb  = null;
		this.mnufilrot  = null;
	}
}

tenho o dao (menuPai)

comandos de conexão, sql, resultset omitidos
		while (rs.next()) {
			MenuBin menuList = new MenuBin();
		        //estanciando o objeto Usuario
			menuList.setMnupor(rs.getString(1));
	        	menuList.setMnucod(rs.getString(2));
		        menuList.setMnutxt(rs.getString(3));
		        menuList.setMnuweb(rs.getString(4));
	        	menuList.setMnurot(rs.getString(5));
		        MenuFilhoDao menuFilho = new MenuFilhoDao();
			ArrayList listFilho = menuFilho.locMenuFilho(codmenu,rs.getString(2));
			menuList.setMnuFil(listFilho);
        
		        list.add(menuList);
		}

Agora o dao do Filho

comandos de conexão, sql, resultset omitidos
while (rs1.next()) {
	MenuFilhoBin menuList = new MenuFilhoBin();
        //estanciando o objeto Usuario
	menuList.setMnufilpor(rs1.getString(1));
        menuList.setMnufilcod(rs1.getString(2));
       	menuList.setMnufiltxt(rs1.getString(3));
        menuList.setMnufilweb(rs1.getString(4));
        menuList.setMnufilrot(rs1.getString(5));
	        
        list.add(menuList);
}

Tenho o controler

String menuTxt = user.getMenu();
MenuDao menu = new MenuDao();
ArrayList<MenuBin>list = new ArrayList<MenuBin>();
list = menu.locMenu(menuTxt);

request.setAttribute("menuload", list);

RequestDispatcher rd = request.getRequestDispatcher("index.jsp");  
rd.forward(request, response); 			

Listo o conteudo de list


for(Iterator<MenuBin> imenu = list.iterator(); imenu.hasNext(); ) {
	MenuBin pai = new MenuBin();
	pai = imenu.next();
	listfil = pai.getMnuFil();
	System.out.println(pai.getMnutxt());
	System.out.println("------------------------");
	for(Iterator<MenuFilhoBin> imenufil = listfil.iterator(); imenufil.hasNext();) {
		MenuFilhoBin filho = new MenuFilhoBin();
		filho = imenufil.next();
		System.out.println(filho.getMnufiltxt());
	}
}

/*
resultado:

Crm                                     
------------------------
Ficha Cadastral Cliente                 
Prospect                                
Representante                           
Pedidos                                 
------------------------
Inclusoes                               
------------------------
HelpDesk                                
------------------------
Chamados 
*/

chamo no jsp

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:forEach var="menupai" items="${menuload}" varStatus="idnum" >
	<li class="menuparent"><a href="#" class="menuPrincipal">${menupai.mnutxt}</a>
	<c:forEach var="menufilho" items="${menupai.mnufil}" varStatus="idnum" >
		<ul style="background:#E3E3E3;">
			<li  onMouseOver="this.style.background = '#C5AC7A'" onMouseOut="this.style.background = '#E3E3E3'">
				<a href="#" style="color:#000000; font-family:Arial, Helvetica, sans-serif; font-size:12px; font-weight:bold; height:20">${menufilho.mnufiltxt}</a>
			</li>
		</ul>
	</c:forEach>
</c:forEach>

Erro gerado

26/11/2008 16:28:38 org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
javax.el.PropertyNotFoundException: Property 'mnufil' not found on type util.modulo.MenuBin

Observando meu Bin do MenuBin ele está lá sim declarado e Alimentado corretamente com os “menus filhos”

porém não estou conseguindo jogar estes menus filhos no jsp.

Agradeço a quem tiver paciencia de observar meus códigos e tentar me ajudar.

Desde já

Christian

Boa tarde, consegui fazendo com script :confused: queria sair deles, alguem pode me ajudar ?

segue o codigo com script

<%@page import="util.modulo.*" %>
<%@page import="java.util.*" %>
<ul id="primary-nav" style="width:100%; border:none;">
<%
	if(session.getAttribute("usuario") != null)
	{
		MenuDao menu = new MenuDao();
		ArrayList<MenuBin>list = new ArrayList<MenuBin>();
		list = menu.locMenu(session.getAttribute("menuLogin").toString());
		ArrayList listfil;
		for(Iterator<MenuBin> imenu = list.iterator(); imenu.hasNext(); ) {
			MenuBin pai = new MenuBin();
			pai = imenu.next();
			listfil = pai.getMnuFil();
%>
	<li class="menuparent"><a href="#" class="menuPrincipal"><%out.print(pai.getMnutxt());%></a>
		<ul style="background:#E3E3E3;">
<%
			for(Iterator<MenuFilhoBin> imenufil = listfil.iterator(); imenufil.hasNext();) {
				MenuFilhoBin filho = new MenuFilhoBin();
				filho = imenufil.next();
%>
			<li  onMouseOver="this.style.background = '#C5AC7A'" onMouseOut="this.style.background = '#E3E3E3'">
				<a href="#" style="color:#000000; font-family:Arial, Helvetica, sans-serif; font-size:12px; font-weight:bold; height:20"><%out.print(filho.getMnufiltxt());%></a>
			</li>
<%
			}
%>
		</ul>
	</li>
<%
		}
	}
%>
</ul>

UP UP

Será que ninguém tem alguma dica ?

1 for dentro de outro for no jstl ???

Realmente não queria mexer com script mas ta complicado :confused:

Christian

Olá Camillen…

Crie uma classe que faça isso para você (gerar esse html dos menus recheados com o conteudo que vc quer) e faça essa classe “cuspir” o resultado na forma de uma string no seu jsp… cmo isso vc tira a lógica da view.

[]'s

Vi que você quer o for por JSTL … veja se o que fiz uma vez para o menu te ajuda:

[code]

 
[/code]

Aconselho que você coloque o codigo em um editor de textos. Vou ver se monto o seu codigo para vc ver … se te ajuda

att,

Renan

[quote=Rodrigo Pereira Valentim]Olá Camillen…

Crie uma classe que faça isso para você (gerar esse html dos menus recheados com o conteudo que vc quer) e faça essa classe “cuspir” o resultado na forma de uma string no seu jsp… cmo isso vc tira a lógica da view.

[]'s[/quote]

Sim até ai entendi tranquilo, porém não queria misturar os dados no padrão mvc.

Christian

[quote=rpb.cold]Vi que você quer o for por JSTL … veja se o que fiz uma vez para o menu te ajuda:

[code]

 
[/code]

Aconselho que você coloque o codigo em um editor de textos. Vou ver se monto o seu codigo para vc ver … se te ajuda

att,

Renan[/quote]

Opa renan, sim exatamente isso que estava querendo, porém quando eu tento pegar os valores do segundo foreach, que estão dentro de 1 array de objetos do menupai ele dá erro :confused:

no seu caso, é 1 Objeto com array de objetos, ou são variáveis de objetos separados que você está passando

Exemplo

sessionScope.menu.filhos neste array contem tudo, ou vc utiliza mais beans ?

eu utilizo mais beans … cada vez que eu faço FULANO.filhos eu recupero um novo bean

acredito que você pode fazer assim olha o exemplo só adicione os codigo HTML para ficar melhor para vc:

<c:forEach items="sessionScope.menuLogin" var="pai"> <c:out value="${pai.descricao}"/> <c:out value="${pai.link}"/> <c:if test="${not empty pai.getMenuFilho}"> <c:forEach items="pai.getMenuFilho" var="filho"> <c:out value="${filho.descricao}"/> <c:out value="${filho.link}"/> </c:forEach> </c:if> </c:forEach>

[quote=rpb.cold]acredito que você pode fazer assim olha o exemplo só adicione os codigo HTML para ficar melhor para vc:

<c:forEach items="sessionScope.menuLogin" var="pai"> <c:out value="${pai.descricao}"/> <c:out value="${pai.link}"/> <c:if test="${not empty pai.getMenuFilho}"> <c:forEach items="pai.getMenuFilho" var="filho"> <c:out value="${filho.descricao}"/> <c:out value="${filho.link}"/> </c:forEach> </c:if> </c:forEach>[/quote]

Foto do menuPai sendo gerado

Codigo de como estou carregando o menuPai com 1 array de menu filho.

ArrayList<MenuBin> menubin = new ArrayList<MenuBin>();
MenuDao menudao = new MenuDao();
try {
	menubin = menudao.locMenu(user.getMenu());
	request.setAttribute("menuPai", menubin);
	RequestDispatcher rd = request.getRequestDispatcher("index.jsp");  
	rd.forward(request, response); 			
} catch (SQLException e) {
	// TODO Auto-generated catch block
e.printStackTrace();
}

Como estou chamando no jsp

<mnu:forEach items="${menuPai}" var="pai">   
	<mnu:out value="${pai.mnutxt}"/>   
	<mnu:out value="${pai.mnurot}"/>   
	<mnu:if test="${not empty pai.mnufil}">   
		<mnu:forEach items="pai.mnufil" var="filho">   
		 	<mnu:out value="${filho.mnufiltxt}"/>   
			<mnu:out value="${filho.mnufilrot}"/>   
		</mnu:forEach>   
	</mnu:if>   
</mnu:forEach>  

Erro

org.apache.jasper.JasperException: An exception occurred processing JSP page /menu.jsp at line 32

29:		<mnu:forEach items="${menuPai}" var="pai">   
30: 			<mnu:out value="${pai.mnutxt}"/>   
31: 			<mnu:out value="${pai.mnurot}"/>   
32: 			<mnu:if test="${not empty pai.mnufil}">   
33: 			<mnu:forEach items="${pai.mnufil}" var="filho">   
34: 				<mnu:out value="${filho.mnufiltxt}"/>   
35: 				<mnu:out value="${filho.mnufilrot}"/>   


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	util.controller.Login.doPost(Login.java:64)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

javax.el.PropertyNotFoundException: Property 'mnufil' not found on type util.modulo.MenuBin

O que estou fazendo de errado ?

no meu Bin do Pai eu defino 1 arraylist contendo Objetos do tipo menufilho, e quando faço referencia no segundo foreach ele não encontra a propriedade.

Agradeço a ajuda

Christian

vc importou as bibliotecas do jstl no projeto e na pagina JSP ?

no jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

no projeto add o jar abaixo:

Tem certeza q vc tem o metodo: getMnufil() ?

att,

Renan

[quote=rpb.cold]vc importou as bibliotecas do jstl no projeto e na pagina JSP ?

no jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

no projeto add o jar abaixo:

Tem certeza q vc tem o metodo: getMnufil() ?

att,

Renan[/quote]

Ja tenho a biblioteca do jstl nesta versão ai que vc passou e está no projeto, e também estou chamando, porém chamei apenas o do prefixo mnu, e não do fn, mas já adicionei e também deu erro.

<% String path = ""; %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="mnu" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> // !--> não tinha este, coloquei agora, mesmo assim deu erro
<%@ include file="cabecalho.jsp" %>
<%@ include file="menu.jsp" %>  
<table border="0" cellpadding="0" cellspacing="0" width="95%" height="100%">
    <tr>
        <td class="corpo">
            <fieldset>
                <legend><a href="<%= path %>index.jsp" class="submenu">Home</a></legend>
                <table border="0" cellpadding="0" cellspacing="0" class="corpo" width="100%" height="100%">
                    <tr>
                        <td width="20%"></td>
                        <td>
                            Seja bem vindo ao nosso Portal...
                        </td>
                    </tr>
                </table>
            </fieldset>                            
        </td>
    </tr>
</table>
<%@ include file="rodape.jsp" %>

Tenho olha o bin do menupai abaixo

public class MenuBin {   
    private String mnupor;   
    private String mnucod;   
    private String mnutxt;   
    private String mnuweb;   
    private String mnurot;   
    private ArrayList mnufil;    // Olha ele aqui
       
    public MenuBin()    {   
        this.mnupor  = null;   
        this.mnucod  = null;   
        this.mnutxt  = null;   
        this.mnuweb  = null;   
        this.mnurot  = null;   
        this.mnufil  = null;     // Olha ele aqui
  
getter e setter ocultados...   

BOm meu caro amigo,

fiz o codigo abaixo e o menu é montado com sucesso, o nosso problema é q nao podemos começar com um for já que o mais nao é um array … só podemos usar o for na hora que aparece o array de filhos eu montei uma servlet que popula os beans e uma jsp q trata a seção com jstl veja se te ajuda:

beans:

[code]public class BeanPai {
private String mnupor;
private String mnucod;
private String mnutxt;
private String mnuweb;
private String mnurot;
private ArrayList mnufil;


}[/code]

[code]public class BeanFilho {
private String mnufilpor;
private String mnufilcod;
private String mnufiltxt;
private String mnufilweb;
private String mnufilrot;


}[/code]

Servlet:

[code]import java.io.IOException;

import java.util.ArrayList;

import javax.servlet.;
import javax.servlet.http.
;

public class Servlet1 extends HttpServlet {
private static final String CONTENT_TYPE = “text/html; charset=windows-1252”;

public void init(ServletConfig config) throws ServletException {
    super.init(config);
}

public void doGet(HttpServletRequest request, 
                  HttpServletResponse response) throws ServletException, IOException {response.setContentType(CONTENT_TYPE);
    doPost(request,response);
}

public void doPost(HttpServletRequest request, 
                   HttpServletResponse response) throws ServletException, IOException {response.setContentType(CONTENT_TYPE);
    BeanPai pai = new BeanPai();
    
    
    pai.setMnucod("1");
    pai.setMnutxt("Home Site");
    pai.setMnurot("http://www.uol.com.br");
    
    ArrayList filhos = new ArrayList();
    
    BeanFilho filho = new BeanFilho();
    filho.setMnufilcod("2");
    filho.setMnufiltxt("Filho 1");
    filho.setMnufilrot("http://www.ig.com.br");
    filhos.add(filho);
    
    BeanFilho filho2 = new BeanFilho();
    filho2.setMnufilcod("3");
    filho2.setMnufiltxt("Filho 2");
    filho2.setMnufilrot("http://www.google.com.br");
    filhos.add(filho2);
    
    pai.setMnufil(filhos);
    HttpSession session = request.getSession();
    session.setAttribute("menu",pai);
    
    
    response.sendRedirect("inicial.jsp");
}

}[/code]

JSP que trata a session:

[code]
<%@ page contentType=“text/html;charset=windows-1252”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>

inicial
<c:out value="${pai.mnutxt}"/>
<ul>
    <c:forEach items="${pai.mnufil}" var="filhos">
        <li><a href="${filhos.mnufilrot}"><c:out value="${filhos.mnufiltxt}"/></a></li>
    </c:forEach>
</ul>
[/code]

Espero que agora te ajude …

att,

Renan

renan obrigado por postar isso, teria como vc só ajustar 1 coisa ?

estilo, no meu menu, é 1 array de objetos com outro array de objetos, no seu menu, é 1 objeto com 1 array de objetos dentro, teria como vc refazer o exemplo, como eu queria,

no exemplo que vc postou, vc está colocando para imprimir o cabeçalho e logo em baixo fazendo o foreach.

Se tiver como já vou quase conseguir aqui. Desde já agradeço muito

ps. seu exemplo funcionou, porém tentei aplicar ele no meu exemplo, e deu um erro. falando que 1 propriedade do pai.mnutxt não existe.

Christian

:shock: , nao sei se entendi mto bem mais eu acho q vc tem a seguinte estrutura :

Array de pais …

Pais que pode ter um array de filhos é isso mesmo ?

vou quebrar o seu galho olha o exemplo aqui;

Servlet:

[code]import java.io.IOException;

import java.util.ArrayList;

import javax.servlet.;
import javax.servlet.http.
;

public class Servlet1 extends HttpServlet {
private static final String CONTENT_TYPE = “text/html; charset=windows-1252”;

public void init(ServletConfig config) throws ServletException {
    super.init(config);
}

public void doGet(HttpServletRequest request, 
                  HttpServletResponse response) throws ServletException, IOException {response.setContentType(CONTENT_TYPE);
    doPost(request,response);
}

public void doPost(HttpServletRequest request, 
                   HttpServletResponse response) throws ServletException, IOException {response.setContentType(CONTENT_TYPE);
    
    ArrayList pais = new ArrayList();
    
    BeanPai pai = new BeanPai();
    pai.setMnucod("1");
    pai.setMnutxt("Home Site");
    pai.setMnurot("http://www.uol.com.br");
    
    ArrayList filhos = new ArrayList();
    
    BeanFilho filho = new BeanFilho();
    filho.setMnufilcod("1.1");
    filho.setMnufiltxt("Filho 1");
    filho.setMnufilrot("http://www.ig.com.br");
    filhos.add(filho);
    
    BeanFilho filho2 = new BeanFilho();
    filho2.setMnufilcod("1.2");
    filho2.setMnufiltxt("Filho 2");
    filho2.setMnufilrot("http://www.google.com.br");
    filhos.add(filho2);
    
    pai.setMnufil(filhos);
    
    ArrayList filhos2 = new ArrayList();
    
    BeanPai pai2 = new BeanPai();
    pai2.setMnucod("2");
    pai2.setMnutxt("Developer");
    pai2.setMnurot("http://www.rpbdesigner.com");
    
    BeanFilho filho3 = new BeanFilho();
    filho3.setMnufilcod("2.1");
    filho3.setMnufiltxt("Filho 3");
    filho3.setMnufilrot("http://www.google.com.br");
    filhos2.add(filho3);
    
    pai2.setMnufil(filhos2);
    
    BeanPai pai3 = new BeanPai();
    pai3.setMnucod("3");
    pai3.setMnutxt("Renan Barbalho");
    pai3.setMnurot("http://www.rpbdesigner.com");
    
    pais.add(pai);
    pais.add(pai2);
    pais.add(pai3);
    
    
    HttpSession session = request.getSession();
    
    session.setAttribute("menuArray",pais);
    
    
    response.sendRedirect("inicial.jsp");
}

}[/code]

JSP com JSTL:

[code]
<%@ page contentType=“text/html;charset=windows-1252”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>

inicial
[/code]

[]'s

Renan

Renan, Agradeço muito

Agora estou mais tranquilo, consegui ajustar tudo aqui.

Muito obrigado

Christian

poxa espero q tenha ajudado de verdade …

precisando só falar

[]'s

Renan