Boa noite.
Estou iniciando com struts 2 e já me deparei com o primeiro problema:
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>
fiaux
Março 31, 2008, 11:02pm
#2
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.
fiaux
Março 31, 2008, 11:20pm
#4
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.
fiaux
Março 31, 2008, 11:32pm
#6
E a classe PostoGrad? Como está?
fiaux
Março 31, 2008, 11:34pm
#7
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 ??
fiaux
Março 31, 2008, 11:42pm
#10
Peraí, sem <html><body></body></html>? Tá direcionando para alguma página ou não?
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<body>
<s:form>
<s:select name="postoGrad" headerKey="-1" list="listaPostoGrad" listKey="idPostoGrad" listValue="dePostoGrad" value="postoGrad" />
</s:form>
</body>
</html>
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 ?
fiaux
Abril 1, 2008, 2:51pm
#16
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.
raoni
Abril 2, 2008, 9:07am
#18
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