Senhores,
Estou com um problema durante uma execução da minha aplicação.
Ao tentar fazer o retorno de um metodo ocorre o seguinte erro:
10:52:55,125 ERROR [LogInterceptor] RuntimeException: java.lang.ArrayStoreException
Esse erro ocorre nessa linha do codigo:
return ((String[])retorno.toArray(new String[]{}));
retorno é um ArrayList.
O que eu acho que estou fazendo de errado é que estou adicionando no ArrayList os meus objetos VO.
O que eu posso fazer para que não ocorra mais esse erro?
Obrigado,
Fabiano.
[quote=FabianoPatricio]Senhores,
retorno é um ArrayList.
O que eu acho que estou fazendo de errado é que estou adicionando no ArrayList os meus objetos VO.
[/quote]
exato!! se o vc tem um array de String, vc não pode adicionar outro objeto nele!
public class ArrayStoreException
extends RuntimeException
Thrown to indicate that an attempt has been made to store the wrong type of object into an array of objects. For example, the following code generates an ArrayStoreException:
Object x[] = new String[3];
x[0] = new Integer(0);
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ArrayStoreException.html
Legal…
mas o que eu preciso é retornar uma lista de VO´s.
Exemplo:
Obj1
Nome: Teste1; Idade: 10
Obj2
Nome: Teste2; Idade: 20
Obj3
Nome: Teste3; Idade: 17
Array[Obj1,Obj2,Obj3].
Preciso retornar todos esses Obj´s.
Como posso fazer isso?
Olá,
Você pode retornar diretamente o arraylist
List retorno = new ArrayList();
retorno.add(obj1);
retorno.add(obj2);
retorno.add(obj3);
return retorno;
é claro, com as devidas alterações na assinatura de seu método.
Ou se ainda quiser usar array (e tbm tem que alterar a assinatura do método)
faça
return ((ObjetoVO[])retorno.toArray(new ObjetoVO[]{}));
onde ObjetoVo o objeto que vc criou.
[]´s
Rodrigo
Mantu
Novembro 7, 2006, 3:26pm
#5
Olha só, não sei por quê, só sei que se você fizer assim:
return (String[])retorno.toArray(new String[0]);
funciona.
Alguém que saiba por que isso funciona assim, pelo amor de Deus, se manifeste!
[quote=Mantu]Olha só, não sei por quê, só sei que se você fizer assim:
return (String[])retorno.toArray(new String[0]);
funciona.
Alguém que saiba por que isso funciona assim, pelo amor de Deus, se manifeste![/quote]
Olá,
esse código funciona se vc quiser retornar um array de string, e seu arrayList chamado retorno tiver somente strings
Mas, no caso do colega, ele quer retornar os objetos dele, então isso não vai funcionar (e é exatamente aí onde ele fala que ocorre o erro)
Doc do método toArray
http://java.sun.com/j2se/1.5.0/docs/api/java/util/ArrayList.html#toArray(T[])
[]´s
Rodrigo
Eu consegui utilizar o
List retorno = new ArrayList();
retorno.add(obj1);
retorno.add(obj2);
retorno.add(obj3);
return retorno;
mas na hora de colocar isso em uma pagina jsp utilizando struts eu não consigo utilizar os metodos dos meu objetos.
olá
mostre o código que vc tah usando na sua jsp para mostrar os dados
[]´s
Rodrigo
Na minha pagina jsp eu estou tentando utilizar assim:
<logic:iterate id="metricaData" name="metricaData" type="MetricaVo">
Agora como é um ArrayList, eu tenho q utilizar assim:
<logic:iterate id="metricaData" name="metricaData" type="ArrayList">
Correto?
Agora eu me perdi aqui…(Na verdade eu estou perdido em quase tudo…hehe )
Na primeira linha de codigo, funciona quando é para um unico objeto, agora como são vários, não tenho ideia de como trabalhar.
valeu.
Esse codigo é o meu action:
MetricaFormCon metricaFormCon = (MetricaFormCon)form;
String[] metricaList = MetricaHelper.getMetricaList( metricaFormCon.getGrupo(),
metricaFormCon.getPeriodicidade());
ArrayList metricaData = null;
if (metricaFormCon.getPeriodicidade().equals("1")){
metricaData =
MetricaHelper.getMetricaDataCon(
metricaList,
metricaFormCon.getDataIni(),
metricaFormCon.getDataFin());
}
request.setAttribute("metricaList", metricaList);
request.setAttribute("metricaConData", metricaData);
Quando eu estou no Debug, até a linha
request.setAttribute("metricaConData", metricaData);
é o ArrayList com o objetos.
Agora, para utiliza-los na pagina JSP que eu estou perdido.
valeu.
Olá,
vc pode fazer assim (nao precisa especificar o type)
aí já pode usar seu VO dentro do iterate, como no exemplo abaixo, escrevendo-o numa linha de uma tabela.
seuObj nesse caso, refere-se a cada objeto que vc colocou no ArrayList
<logic:iterate id="seuObj" name="metricaConData">
<tr>
<td><bean:write name="seuObj" property="nome"/></td>
</tr>
</logic:iterate>
[]´s
Rodrigo
Legal,
com o logic iterate eu consigo buscar os objetos que estão no ArrayList?
Porque eu estou perguntando isso.
Utilizando esse codigo que você postou aparece o seguinte erro:
‘/tiles/metricas/MetricaDadosCon.jsp’: No getter method for property periodo of bean metricaVo
mas o metodo getPeriodo existe no VO:
public String getPeriodo() {
return periodo;
}
Já tentei com outros metodos e aparece o mesmo erro.
Pode ser que o nome do bean esteja incorreto?
Valeu,
Fabiano.
olá,
poderia postar o seu código?
[]´s
Rodrigo
rodrigo_gomes,
valeu pela ajuda, mas eu consegui arrumar esse erro.
Erro estava na lógica do negócio.
Acabei mudando um pouco a logica e deu certo.
Valeu,
[]'s
Fabiano.