Erro com iterator - java.util.LinkedHashMap$Entry

7 respostas
The_Toad

Olá a todos,

Não conheço muito de java, mas preciso terminar uma aplicação e estou sendo assombrado pelo erro

javax.servlet.ServletException: java.util.LinkedHashMap$Entry cannot be cast to org.richfaces.model.TreeNode
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)

Não faço idéia do que isto significa, alguém pode ajudar?

Obrigado!

Ah, estou usando RichFaces 3.1.3 + JSF padrão 1.2.

7 Respostas

Marky.Vasconcelos

Se você não sabe oque significa é só traduzir que ajuda:

java.util.LinkedHashMap$Entry cannot be cast to org.richfaces.model.TreeNode

java.util.LinkedHashMap$Entry não pode ser convertido para org.richfaces.model.TreeNode

Isso deve ser erro no código, algum cast impossivel.

Poste o código que fica mais fáçil.

Marky.Vasconcelos

PS: Acho melhor usar o RichFaces 3.2.

Ele tem um sortBy e filterBy em DataTables agora, muito mais fáçil de usar do que fazer lógicas no código.

The_Toad

Vou trocar já, obrigado pela dica!

O código que eu estou usando é o seguinte:

Iterator<TreeNode> it = rootNode.getChildren();
		
		while(it.hasNext()){
			System.out.println(it.next().getData());
		}

Ah sim, rootNode é do tipo org.richfaces.model.TreeNode

Abraços.

B

The_Toad:
Vou trocar já, obrigado pela dica!

O código que eu estou usando é o seguinte:

Iterator<TreeNode> it = rootNode.getChildren();
		
		while(it.hasNext()){
			System.out.println(it.next().getData());
		}

Ah sim, rootNode é do tipo org.richfaces.model.TreeNode

Abraços.

getChildren() retorna um iterator?

The_Toad

É sim, java.util.iterator mesmo. O erro só acontece quando tento acessar algum método referenciado pelo iterator, se eu fizer um loop apenas para contar o número de elementos dá tudo certo.

Obrigado!
Abraços.

B

Então é simples, getChildren não é um iterador de TreeNodes.

getChildren() é um iterador de Map.Entry<Object, TreeMap>.

TreeNodes é praticamente um Map por si só.

The_Toad

Boa grande… consegui resolver o problema, obrigado!

O que eu fiz para percorrer toda a árvore montada no richFaces:

public void allTree() {
		Iterator<Map.Entry<Integer,TreeNode>> it = rootNode.getChildren();
		
		while (it.hasNext()){
			Map.Entry<Integer, TreeNode> temp = it.next();
			System.out.println(temp.getKey() + " - " + temp.getValue().getData());
			allTree(temp.getValue(), temp.getKey().toString());
		}
	}
	
	public void allTree(TreeNode nodeParam, String parentSequence) {
		Iterator<Map.Entry<Integer,TreeNode>> it = nodeParam.getChildren();
		
		while (it.hasNext()){
			Map.Entry<Integer, TreeNode> temp = it.next();
			System.out.println(parentSequence + ":" + temp.getKey() + " - " + temp.getValue().getData());
			allTree(temp.getValue(), parentSequence + ":" + temp.getKey());
		}
	}

Acho que é isso, pelo menos funcionou por aqui. Algum problema no código acima?

Obrigado de novo!
Abraços.

Criado 24 de abril de 2008
Ultima resposta 29 de abr. de 2008
Respostas 7
Participantes 3