Galera me desculpe mas tive que me recorrer a ajuda de vocês novamente. Como eu ja disse antes estou aprendendo struts 2 e como sempre todo começo apanhamos muito. Meu problema é o seguinte: tenho um select de estados (todos os estados brasileiro) na hora de fazer alteraçao de um certo cliente preciso que o select da tela de alteração abra com o estado altual do cliente setado no select. E nao estou conseguindo fazer isso. Alguem ai pode me dar um help?
Struts 2 s:select
23 Respostas
qual o name do seu select ?
esse é o meu select cara"
<s:select label="Estado" name="ufs" headerKey="0" headerValue="-- Selecione --" list="estado" />
Uma solução é assim:
Na JSP:
<s:select label="Grupo" list="groups" listKey="id" listValue="description" name="idGroup"/>
Na Action
...
private Long idGroup;
...
public void prepare() throws Exception {
...
groups = service.findAllUserGroup();
user = service.findId(idUser);
idGroup = user.getUserGroup().getId();
...
}
...
public Long getIdGroup() {
return idGroup;
}
public void setIdGroup(Long idGroup) {
this.idGroup = idGroup;
}
Aí tem o código necessário pra entender o exemplo e inserir na sua action com as devidas adaptações.
Falando em select eu tenho uma dúvida que já pesquisei e não encontrei solução! Alguém me ajuda?
O struts sempre tenta salvar o que tah na jsp povoando com um método setAlgumaCoisa, mas eu não consigo passar um objeto pra ele salvar direto, explicando melhor:
No exemplo que citei acima tenho:
<s:select label="Grupo" list="groups" listKey="id" listValue="description" name="idGroup"/>
gostaria de colocar algo como:
<s:select label="Grupo" list="groups" listKey="id" listValue="description" name="user.group"/>
O struts até tenta fazer um setGroup mas diz que não dah pra atribuir pois ele tenta setar um valor String enquanto o Group é um objeto.
Alguém já consigou setar um objeto vindo de um select pelo struts sem ter que “tratar” o mesmo na Action?
Agradeço imensamente a possível ajuda!
Galera estou apanhando muito desse select do struts 2. Fiz tudo como o amigo acima falou mas não aparece nada no select e tb não da erro. Vou colocar o codigo aqui pra ver se alguem pode me dizer onde estou errando.
JSP:<s:form>
<s:select label="Estado" list="estado" listKey="idUF" listValue="descricao" name="idEstado" />
</s:form>
private List<UnidadeFederativa> estado;
private Long idEstado;
public String execute()throws Exception{
estado = new ArrayList<UnidadeFederativa>();
for(int i = 1; i < 27; i++){
UnidadeFederativa uf = new UnidadeFederativa();
uf.setIdUF(Long.valueOf(i));
uf.setDescricao("Estado_"+i);
uf.setSigla("Sigla_"+i);
idEstado = uf.getIdUF();
}
return SUCCESS;
}
public List<UnidadeFederativa> getestado(){
return estado;
}
public Long getIdEstado() {
return idEstado;
}
public void setIdEstado(Long idEstado) {
this.idEstado = idEstado;
}
public class UnidadeFederativa {
private Long idUF;
private String descricao;
private String sigla;
public Long getIdUF() {
return idUF;
}
public void setIdUF(Long idUF) {
this.idUF = idUF;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getSigla() {
return sigla;
}
public void setSigla(String sigla) {
this.sigla = sigla;
}
}
vc colocou getestado() e não getEstado()
este for para povoar o estado está no prepare?
prepare que vc diz seria um metodo? O metodo pra preencher um select tem que ter esse nome? prepare?
fiz a pergunta errada, deveria perguntar se vc tem certeza que este for para povoar o estado está sendo executado?
uma maneira MUITO interessante de fazer isso é utilizando o Interceptor Prepare que neste caso realmente o método tem que ser o prepare, mas vai depender da sua real situação.
http://struts.apache.org/2.0.14/docs/prepare-interceptor.html
mudou o nome do método?
verifique se o for está sendo executado!
O for esta sendo execultado sim. Coloquei um break-point la e verifiquei que a lista esta sendro preenchida normalmente. Só não entendo porque ele não preenche o select. Eu não estou usando Interceptor Prepare não. Essa tarefa esta em uma classe que extende a ActionSuport, e esta dentro do metodo execute(). Como falei anteriormente, comecei a estudar o struts2 agora, não conheço nada dele ainda. E ache muito fraca a documentação do mesmo.
Nobre Caio,
Terceira vez que pergunto: vc mudou o nome do método?
(vc colocou getestado() e não getEstado() )
Ah, e a documentação do mesmo é muito boa, mas em inglês, dê uma olhada: http://struts.apache.org/2.1.8/docs/guides.html
Sim mudei agora esta getEstado().
e aí?
a lista apareceu?
o estado foi selecionado?
Não cara não aparece nada no select. muito extranho.
na action tem um método setEstado? se não, tenta colocando ele!
Tem sim… tem os dois o get e o set.
Nobre Caio,
Diante do exposto, está tudo certo!
Tem algum detalhe que está passando e não estamos vendo, porém não creio que pertença ao código analisado!
O struts está corretamente instalado e funcionando!?
O filtro no web.xml está configurado, o struts.xml, deve ter algo incorreto na configuração…
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Sistema de Administração Pessoal</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Esta assim
e o struts.xml?
Eu criei tudo novo aqui e agora funcionou, Esta preenchendo o select beleza agora. Mas ainda assim preciso de um help teu fera. Quero que uma coisa assim: tenho 27 estados no select. Mas quero que na hora que carregar a tela esta em destaqui um estado especifico, São paulo por exemplo. Como eu faço isso?
Ótimo, que bom que agora foi…
Tem algumas maneiras, por exemplo:
if (cliente == null) {
cliente = new Cliente();
setIdEstado("1");
setIdCidade("1");
}
Acho que vc não entendeu o que eu quero. É assim: tenho esse select:
<s:select name="idUF" list="estados" listKey="idUF" listValue="descricao" headerKey="0" headerValue="-- Selecione --"/>
sempre que carrega a tela ele aparece em destaque a opção Selecione, certo? Em e embaixo os nomes dos 27 estados. Ai eu gostaria de fazer assim. Algo do tipo que aperece em destaque logo quando a pagina for carregada a opção de São Paulo por exemplo. Nas tags de select do netui tem uma opção defaultValue mas no struts não sei qual é que faz essa tarefa.
vê se tem algum parametro nessa lista aqui
http://struts.apache.org/2.0.14/docs/select.html
posta o resultado depois de ter tentado alguma coisa
tenta atribuir o valor idUF para algum valor dessa lista
abraço
Valew paulofernandesjr. Matei a charada. É o parametro value…
<s:select name="idUF" value="10" list="estados" listKey="idUF" listValue="descricao" headerKey="0" headerValue="-- Selecione --"/>
Ai ele seta o estado que tenha o id de valor 10 como default. Muito obrigado.