Struts2 - select -

14 respostas
L

Boa Tarde Pessoal,

Será que alguém poderia me dar uma luz sobre o seguinte erro ao executar o meu projeto.

GRAVE: Servlet.service() for servlet default threw exception
tag ‘select’, field ‘list’, id ‘id’, name ‘sproduto’: The requested list key ‘produtosAll’ could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]

Eu criei o método que resgata a lista na classe Produtos DAO.

public List getAllProduto ()throws SQLException, IOException, ClassNotFoundException {

List produtosAll = new ArrayList();

//HashMap<Produto, String> produtoAll = new HashMap<Produto, String>();

ResultSet resultset = statement.executeQuery(“SELECT * FROM TB_PRODUTO”);

while (resultset.next()){

Produto produtos = new Produto();

produtos.setId(resultset.getInt(“ID”));

produtos.setDescricao(resultset.getString(“DESCRICAO”));

produtosAll.add(produtos);

}

return produtosAll;

}

Criei o atributo na classe Action

private List produtosAll = new ArrayList();

criei seus Get e Set.

Fiz tudo como faço sempre com as outras listas e não carrega a página.

Obrigada!

Luciane

14 Respostas

jyoshiriro

Simples.

Teu método é “getAllProduto()” e você chamou por “produtosAll” no JSP. Assim, no JSP deveria estar “allProduto” (na tag s:select) :wink:

jyoshiriro

Lembre que as tags so Struts2 não acessam os atributos diretamente e sim seus getters. Logo é o nome do getter que importa e não do atributo.

L

Boa tarde José Yoshiriro,

Isso tem funcionado para todas as listas. O que tem que ser igual mesmo é o nome do campo (sproduto) tanto no jsp quanto na action. E isso está certinho porque para todas as outras listas tem funionado.

Meu método getAllProduto() retorna uma lista de produtos.

public List getAllProduto ()throws SQLException, IOException, ClassNotFoundException {

List AllProduto = new ArrayList();

//HashMap<Produto, String> produtoAll = new HashMap<Produto, String>();

ResultSet resultset = statement.executeQuery(“SELECT * FROM TB_PRODUTO”);

while (resultset.next()){

Produto produtos = new Produto();

produtos.setId(resultset.getInt(“ID”));

produtos.setDescricao(resultset.getString(“DESCRICAO”));

AllProduto.add(produtos);

}

return AllProduto;

}

Na minha action a lista produtosAll está recebendo o getAllProduto()

private List produtosAll = new ArrayList();

public List getProdutosAll() {

return produtosAll;

}
public void setProdutosAll(List<Produto> produtosAll) {
    this.produtosAll =  produtosAll;
}

[u] E no meu select eu chamo a lista [b]produtosAll[b] que está no action.

name="sproduto"
                                  headerKey="0"
                                  list="AllProduto"
                                  headerValue=""
                                  id="id"
                                  listValue="descricao"/>

o nome do select está criado na action com seu respectivo get e set.
private int sproduto;

public int getSproduto() {

return sproduto;

}

public void setSproduto(int sproduto) {

this.sproduto = sproduto;

}

Agora o erro permanece e eu não consigo ter uma idéia do que opde ser.
Será que alguém já passou por isso e poderia me ajudar.

O campo id no banco de dados é do tipo Number(6).

Repetindo o erro:

20/06/2011 13:15:44 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet default threw exception
tag ‘select’, field ‘list’, id ‘id’, name ‘sproduto’: The requested list key ‘AllProduto’ could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]

jyoshiriro

Ola, Luciane.

Amiga, eu nunca consegui fazer minhas tags Struts2 terem acesso direto aos campos nas Actions. Sempre foi via getter. Inclusive a documentação Oficial do Framework diz que é assim que ocorre:
http://struts.apache.org/2.2.3/docs/struts-2-form-tags.html

Lá diz:

Você ao menos tentou fazer o que sugeri? Mesmo assim deu o mesmo erro?

Veja, esse erro que você indica sempre ocorreu pra mim quando:

  • o getter não existia ou
  • eu digitava a palavra errada no valor de “list” ou
  • o getter não retornava uma coleção/mapa/array ou
  • quando o getter dá uma exceção.

Boa sorte.

jyoshiriro

Veja nesse exemplo do portal Roseindia como também dizem pra usar o getter e não o atributo direto:
http://www.roseindia.net/struts/struts2/struts2uitags/select-tag.shtml

L

Oi!

Eu tentei sim, mudei tudo e executei e o mesmo erro ocorreu.

Vou ler esses tópicos que me passou e tentar com mais calma.

Muitíssimo obrigada pela ajuda, tem sido muito valiosa.

jyoshiriro

Bom, então, por eliminação, só resta investigar as causas:

  • o getter não retorna uma coleção/mapa/array ou
  • o getter dá uma exceção e não chega a seu “return”.
L

Ah,
Não dá certo de jeito nenhum. Ai que tristeza, empacou tudo aqui. :frowning:

Já testei e não há exceção no getter e ele está retornando a lista sim.

Eu fiquei imaginando que o problema seria na tabela tb_Produto que criei no banco de dados Oracle.

Pois criei outra tabela e fiz todos os procedimentos de resgatar os dados dela e o mesmo erro ocorreu!

:frowning:

jyoshiriro

Faz o seguinte:

Comenta o teu “<s:select”. Dai coloca essa EL em qualquer parte do JSP, solto mesmo: ${produtosAll}. (Afinal seu atributo “list” contém “produtosAll”, não é?).
Se no lugar da EL for renderizado uma lista Java (Ex: [com.jyosrhiriro.Pessoa@2342, com.jyosrhiriro.Pessoa@6467]), é porque você fez tudo certo e é algum bug da taglib. Se nada for renderizado no JSP é definivamente algum problema no teu getter.

L

Olá!

Eu fiz isso e realmente naõ apareceu nada. Testei com outra lista e aparece exatamente como você mencionou.

Só que meus olhos não conseguem ver onde está o erro na minha lista de allProdutos

Refiz o Bean, o DAO e os getters e setter do Action e o erro permanece. :frowning:

Obrigada

Luciane

jyoshiriro

Tentou por um try/catch e/ou rodar em modo debug?
Quando isso acontecia comigo era porque o getter dava exceção.

L

ah José!

Você tinha toda razão. Era problema no Get. Eu só precisava olhar além…

O problema estava no método Set da tabela de itens do produto.
Estava recebendo algo que ainda não existia.

Comentei esse método e funcionou.

Agora vou refazer o método!

Obrigada pela atenção.

jyoshiriro

Ok, Luciane. Estamos aqui pra isso.

Só coloque o [RESOLVIDO] no título do tópico para ajudar outros colegas futuramente, ok?

PS: costumam me chamar de “Yoshi” e não “José”

L

oK oK…
Thanks…

Criado 17 de junho de 2011
Ultima resposta 21 de jun. de 2011
Respostas 14
Participantes 2