Java.lang.NumberFormatException: For input string:

8 respostas
Ace

Boa tarde pessoal,
Tenho um método para contar a quantidade de ocorrencias de um mesmo produto agrupa-los, e mostrar qual produto existe uma maior ocorrência, e ao tentar acessar um atributo deste objeto como por exemplo:

<c:forEach var="lista" items="${enquete}">				
	${lista.nome}							
</c:forEach>

o mesmo me dava a Exception “java.lang.NumberFormatException: For input string:

correndo atras de uma solução, encontrei um post e em um determinado trecho ele dizia assim:

" O que eu estou retornando para esse query era para ser uma Collection de objetos do tipo Funcao, só que está sendo retornado uma Collection de array de objetos Collection<Object[]>. Logo na minha JSP ao iterar essa Collection é disparada uma exception justamente por não existir uma propriedade “f.nome” por exemplo mas apenas “f[1]” por exemplo. "

Logo, para acessar o atributo necessário precisei alterar meu forEach para

<c:forEach var="lista" items="${enquete}">				
	${lista[1].nome}							
</c:forEach>

Dessa maneira meu problema foi solucionado, mas gostaria de saber se isso pode me dar problemas futuros ?, pois eh a primeira vez que preciso acessar uma posição do array de busca e depois o atributo

Ou como posso alterar meu DAO para me trazer Collection de objetos do tipo Produto ao invés de uma “Collection de array de objetos

8 Respostas

drsmachado

Sim, pode. Se os dados começarem a vir em outra posição do array.

Ace:

Ou como posso alterar meu DAO para me trazer Collection de objetos do tipo Produto ao invés de uma “Collection de array de objetos

Acho que o problema do DAO é aquela vírgula ali, fora do lugar, na linha 134.

Ace

Descupa man, não entendi.

drsmachado

Descupa man, não entendi.
Nem eu entendo como quer que possamos dar opinião sobre o DAO se nem o código do bendito você postou aqui.

Ace

rsrs…

lavai!

public List<Voto> getVoto(){
			Criteria c = session.createCriteria(Voto.class);
			c.setProjection(
					Projections.projectionList()				
					.add(Projections.rowCount(), "qtdProd")
					.add(Projections.groupProperty("produto"))				
					);
			c.addOrder(Order.desc("qtdProd"));
			c.setMaxResults(1);
			return c.list();
		}
drsmachado

O problema é exatamente o método do DAO.
Creio que você precisará fazer um cast explícito ali ou, melhor ainda, criar uma variável List dentro do método, pegar o retorno de c.list() com ela e “jogar” este objeto para as outras camadas.

Ace

drsmachado cara, a dica você me deu, estava quebrando a cabeça aqui pra fazer da maneira que disse, mas fiz um monte de porcariada q não funcionou!
se não for muito incômodo poderia me mostrar a alteração no meu método? e como vou “jogar” ele para as outras camadas?

obrigado.

drsmachado

Pouts, agora que fui ver.
Você está criando uma query com projeção. Aí não tem jeito.
Veja bem, o resultado que você busca não está sendo recebido isolado, ele vem junto de outros dados, por isso o modo de ser retornado, como coleção de array de objetos.

Ace

Hmm, agora ficou bastante claro pra mim, porém a maneira que consegui acessar esses atributos foi como havia colocado acima, indicando a posição do array.
por enquanto a solução fica essa mesmo não tem jeito.

Mas cara, vlw pela paciência!

Abras

Criado 11 de junho de 2012
Ultima resposta 11 de jun. de 2012
Respostas 8
Participantes 2