Erro leitura de 2 objetos em For separados

Bom dia novamente. Tentei de tudo o quanto meu conhecimento cabia neste assunto, e não dei conta :confused:

Novamente sobre a historia do menu.

Eu consigo listar o menu Pai da forma abaixo demonstrada.

<%@ page import="model.sistema.*" %>
<%@ page import="java.util.*" %>
<%
	MenuDao menu = new MenuDao();
	String menuTxt = session.getAttribute("menuLogin").toString();
	ArrayList list = menu.locMenu(menuTxt);
	for(Iterator<Menu> imenu = list.iterator(); imenu.hasNext(); ) {
		System.out.println("Menu Pai:" + imenu.next().getMnutxt());
	}
%>

Listagem no console do Menu Pai

Menu Pai:Crm
Menu Pai:Pedidos
Menu Pai:Inclusoes
Menu Pai:Contas a Pagar
Menu Pai:Consultas
Menu Pai:Documentos
Menu Pai:Manutencao

também consigo listar o menu filho.

<%@ page import="model.sistema.*" %>
<%@ page import="java.util.*" %>
<%
	MenuDao menu = new MenuDao();
	String menuTxt = session.getAttribute("menuLogin").toString();
	ArrayList list = menu.locMenu(menuTxt);
	ArrayList listfil;
	for(Iterator<Menu> imenu = list.iterator(); imenu.hasNext(); ) {
		listfil = imenu.next().getMnuFil();
		//System.out.println("Menu Pai:" + imenu.next().getMnutxt());
		for(Iterator<MenuFilho> imenufil = listfil.iterator(); imenufil.hasNext();) {
			//System.out.println("Menu pai"+ menupai);
				System.out.println("Menu filho: "+ imenufil.next().getMnufiltxt());
		}
	}
%>

Listagem no console do Menu Filho

Menu filho: Ficha Cadastral
Menu filho: Representante
Menu filho: teste
Menu filho: Papel
Menu filho: Chapas
Menu filho: Caixas
Menu filho: Doc Alteracao FT
Menu filho: Pre-FT
Menu filho: Prospect
Menu filho: Especif.Papel Cliente
Menu filho: FNC
Menu filho: Titulos em Aberto
Menu filho: Notas de Credito
Menu filho: Titulos Pagos
Menu filho: Posicao Financeira
Menu filho: Pedidos em Aberto
Menu filho: Pesquisa de Pedidos
Menu filho: DAs em Aberto
Menu filho: Consulta Clientes
Menu filho: Generico
Menu filho: Consulta Pap.Ond.
Menu filho: Manuais
Menu filho: Help
Menu filho: Redefinir Representante

Agora está gerando erro quando eu tento fazer isso:

<%@ page import="model.sistema.*" %>
<%@ page import="java.util.*" %>
<%
	MenuDao menu = new MenuDao();
	String menuTxt = session.getAttribute("menuLogin").toString();
	ArrayList list = menu.locMenu(menuTxt);
	ArrayList listfil;
	for(Iterator<Menu> imenu = list.iterator(); imenu.hasNext(); ) {
		listfil = imenu.next().getMnuFil();

		 // (unica linha que acrecentei )
		System.out.println("Menu Pai:" + imenu.next().getMnutxt());
		 // (unica linha que acrecentei )

		for(Iterator<MenuFilho> imenufil = listfil.iterator(); imenufil.hasNext();) {
			//System.out.println("Menu pai"+ menupai);
			System.out.println("Menu filho: "+ imenufil.next().getMnufiltxt());
		}
	}
%>

Codigo do erro gerado

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

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

37: 					ArrayList listfil;
38: 					for(Iterator<Menu> imenu = list.iterator(); imenu.hasNext(); ) {
39: 						listfil = imenu.next().getMnuFil();
40: 						System.out.println("Menu Pai:" + imenu.next().getMnutxt());
41: 						for(Iterator<MenuFilho> imenufil = listfil.iterator(); imenufil.hasNext();) {
42: 							//System.out.println("Menu pai"+ menupai);
43: 							System.out.println("Menu filho: "+ imenufil.next().getMnufiltxt());


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)

Desde já agradeço a todos que estão me ajudando nesta empreitada.

Christian

Obviamente o erro é devido à linha que você acrescentou. Não se esqueça que “next” altera o cursor do iterador; se você precisa do tal valor, você tem de guardá-lo em uma variável, em vez de ficar chamando “next” à toa.

         listfil = imenu.next().getMnuFil();  
   
          // (unica linha que acrecentei )  
         System.out.println("Menu Pai:" + imenu.next().getMnutxt());  

[quote=thingol]Obviamente o erro é devido à linha que você acrescentou. Não se esqueça que “next” altera o cursor do iterador; se você precisa do tal valor, você tem de guardá-lo em uma variável, em vez de ficar chamando “next” à toa.

[code]
listfil = imenu.next().getMnuFil();

      // (unica linha que acrecentei )  
     System.out.println("Menu Pai:" + imenu.next().getMnutxt());  

[/code][/quote]

Não sábia disso, quando imaginei (vendo o código) tem 1 next para cada objeto).

agora eu fiz assim e deu certo, por causa da sua dica.

&lt;%@ page import="model.sistema.*" %&gt;
&lt;%@ page import="java.util.*" %&gt;
&lt;%
	MenuDao menu = new MenuDao();
	String menuTxt = session.getAttribute(&quot;menuLogin&quot;).toString();
	ArrayList list = menu.locMenu(menuTxt);
	ArrayList listfil;

	for(Iterator&lt;Menu&gt; imenu = list.iterator(); imenu.hasNext(); ) {
		Menu pai = new Menu();
		pai = imenu.next();
		listfil = pai.getMnuFil();
		System.out.println(&quot;Menu Pai:&quot; + pai.getMnutxt());
		
		for(Iterator&lt;MenuFilho&gt; imenufil = listfil.iterator(); imenufil.hasNext();) {
			System.out.println(&quot;Menu filho: &quot;+ imenufil.next().getMnufiltxt());
		}
	}
%&gt;

Agradeço d+ a ajuda

Quando eu "crescer" quero ajudar também, pq se ajudando que se aprende.