Popular Select com Struts 2 - [Resolvido]

17 respostas
E

Boa noite.

Estou iniciando com struts 2 e já me deparei com o primeiro problema:

  • Como popular um select ?

Tenho uma Action que retorna um ArrayList de informações.
Essa Action ja foi testada.

O problema é no <s:select list="">

Bem vou postar os códigos para vcs me ajudarem.

OBS: Ja dei uma boa pesquisada em foruns e nada.

Segue Codigos.

package pmb.secinfor.action;

import java.util.ArrayList;

import com.opensymphony.xwork2.ActionSupport;

import pmb.secinfor.dao.PostoGradDAO;
import pmb.secinfor.model.PostoGrad;

public class PostoGradAction extends ActionSupport{

private static final long serialVersionUID = 1L;

public ArrayList<PostoGrad> listaPostoGrad;


public void setListaPostoGrad(ArrayList<PostoGrad> listaPostoGrad) {
	this.listaPostoGrad = listaPostoGrad;
}

public ArrayList<PostoGrad> getListaPostoGrad() {
	return listaPostoGrad;
}


public void listarPostoGrad() {
	listaPostoGrad = PostoGradDAO.getInstancePostoGrad().listaPostoGrad();
}

}

cadastrarUsuario.jsp

<%@ taglib prefix=“s” uri="/struts-tags"%>
<s:form>
<s:select name=“postoGrad” headerKey="-1" list=“listaPostoGrad” listKey=“idPostoGrad” listValue=“dePostoGrad” value=“postoGrad” />
</s:form>

17 Respostas

F

Já respondi essa antes, é legal fazer uma busca antes, dá uma olhada aqui http://www.guj.com.br/posts/list/84105.java

E

Isso caro colega.
Mas a consulta ao banco ja está sendo feita e retornando os valores certinhos.

Eu tinha visto sua resposta mas não entendi direito.

Pode me dar um exemplo ou uma explicação melhor?

Obrigado.

F

Exemplo de um select? No link tem. Se você já tem uma consulta ao banco funcionando, basta mandar um s:select na jsp e dizer a ele o nome do atributo da action que contém a listagem.

E

Isso!

Chegamos ao ponto.

Eu faço isso mas não funciona.

Dá uma olhada no código do post para ver se vc repara em alguma coisa errada.

F

E a classe PostoGrad? Como está?

F

Sem conhecer a classe eu faria algo assim:

<s:select name="idPostoSelecionado" list="listaPostoGrad" listKey="idPostoGrad" listValue="nomePostoGrad" headerKey="Selecione uma Opção" headerValue="" />
E

Segue classe PostoGrad:

Lembrando que quando eu escrevo o método listaPostoGrad usando o Iterator na propria action eu consigo ver todas as informações.

Por isso acho que o problema é no struts.

package pmb.secinfor.model;

// Generated 26/03/2008 00:51:43 by Hibernate Tools 3.2.0.b9

import java.util.HashSet;
import java.util.Set;

/**

  • PostoGrad generated by hbm2java
    */
    public class PostoGrad implements java.io.Serializable {

    private int idPostoGrad;
    
    private String dePostoGrad;
    
    private Set usuarios = new HashSet(0);
    

    public PostoGrad() {
    }

    public PostoGrad(int idPostoGrad) {
    
    this.idPostoGrad = idPostoGrad;
    
    }
    
    public PostoGrad(int idPostoGrad, String dePostoGrad, Set usuarios) {
    
    this.idPostoGrad = idPostoGrad;
    
    this.dePostoGrad = dePostoGrad;
    
    this.usuarios = usuarios;
    
    }
    
    public int getIdPostoGrad() {
    
    return this.idPostoGrad;
    
    }
    
    public void setIdPostoGrad(int idPostoGrad) {
    
    this.idPostoGrad = idPostoGrad;
    
    }
    
    public String getDePostoGrad() {
    
    return this.dePostoGrad;
    
    }
    
    public void setDePostoGrad(String dePostoGrad) {
    
    this.dePostoGrad = dePostoGrad;
    
    }
    
    public Set getUsuarios() {
    
    return this.usuarios;
    
    }
    
    public void setUsuarios(Set usuarios) {
    
    this.usuarios = usuarios;
    
    }
    

}

E

Então

fiz assim e nada.
<%@ taglib prefix=“s” uri="/struts-tags"%>
<s:form>
<s:select name=“postoGrad” headerKey="-1" list=“listaPostoGrad” listKey=“idPostoGrad” listValue=“dePostoGrad” value=“postoGrad” />
</s:form>

tem que mapear alguma coisa no struts.config ??

F

Peraí, sem <html><body></body></html>? Tá direcionando para alguma página ou não?

&lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;
&lt;html&gt;
   &lt;body&gt;
      &lt;s:form&gt;
         &lt;s:select name="postoGrad" headerKey="-1" list="listaPostoGrad" listKey="idPostoGrad" listValue="dePostoGrad" value="postoGrad" /&gt;
      &lt;/s:form&gt;
   &lt;/body&gt;
&lt;/html&gt;

Sobre mapear, aí depende, você pode mapear ou usar o zero configuration. Eu sugiro ler um pouco a documentação. Tem até um exemplo criando do zero e tal.

E

Ja ta com zero configuration.

Adicionei as tags HTML e nada

Segue o erro:

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

H

use o debug .Faça o seguinte para ver o conteudo dos campos que estao sendo enviados para a tela :

<%@ taglib prefix="s" uri="/struts-tags"%>
<s:debug>

<s:form>
<s:select name="postoGrad" headerKey="-1" list="listaPostoGrad" listKey="idPostoGrad" listValue="dePostoGrad" value="postoGrad" />
</s:form>

quando for exibida a tela irá aparecer um link ‘DEBUG’ que clicando mostra os campos que chegaram na tela, isso é bom para descobrir o que foi preenchido ou nao no action

Espero ter ajudado

Herrera

H

me ocorreu uma coisa, onde está definido o campo ‘nomePostoGrad’ que aparece na listValue ? não deveria ser ‘dePostoGrad’ como descrito na classe Postgrad ?

Herrera

ps. foi mal, agora percebi que já foi arrumado

E

Nada ainda pessoal.

segue o erro

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

aguardo ajuda!

E

Colegas.

Inseri chaves no list e apresentou a tela sem erros mas o select retornou [null].

<s:select label=“Posto/Graduação” name=“listarPostoGrad” list="{listarPostoGrad}" listKey=“idPostoGrad” listValue=“dePostoGrad” headerValue="-- Selecione --" />

no meu action ao iterar o ArrayList ele retorna os dados certinhos.

o que pode ser ?

F

Bota um breakpoint no getListaPostoGrad. No s:select no atributo list usa list=“listaPostoGrad”. Na action tem que ter um get para listaPostoGrad. Veja o que está sendo retornado. Veja também o source dá página gerada.

E

Muito obrigado pelas dicas.
O problema foi resolvido.

1 - Deve sim ser criado um action no struts.xml (<action name="" …)

2 - O método que lista o objeto deve ser uma String e retornar um ActionSuport.INPUT; (o input deverá ser mapeado como result da action no struts.xml)

Forte Abraço.

R

Bom dia pessoal!!! (sou novo nesse struts)

Estou tento o mesmo erro…

Como eu teria que mapear no struts.xml? para retornar a lista dos actions.

pode mostrar um exemplo que foi feito em seu <action ?

obrigado

Criado 31 de março de 2008
Ultima resposta 2 de abr. de 2008
Respostas 17
Participantes 4