Popular Select com Struts 2 - [Resolvido]

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>

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

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.

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.

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.

E a classe PostoGrad? Como está?

Sem conhecer a classe eu faria algo assim:

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

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;
    }

}

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 ??

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.

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]

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

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

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!

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 ?

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.

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.

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