Struts 2 s:select

23 respostas
caiomacedor

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?

23 Respostas

edysnipes

qual o name do seu select ?

caiomacedor

esse é o meu select cara"

<s:select label="Estado" name="ufs" headerKey="0" headerValue="-- Selecione --" list="estado" />
higomatos

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!

caiomacedor

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>
Action:
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;
	}
VO:
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;
	}
}
higomatos

vc colocou getestado() e não getEstado()

este for para povoar o estado está no prepare?

caiomacedor

prepare que vc diz seria um metodo? O metodo pra preencher um select tem que ter esse nome? prepare?

higomatos

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!

caiomacedor

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.

higomatos

Nobre Caio,

Terceira vez que pergunto: vc mudou o nome do método?

(vc colocou getestado() e não getEstado() )

higomatos

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

caiomacedor

Sim mudei agora esta getEstado().

higomatos

e aí?

a lista apareceu?

o estado foi selecionado?

caiomacedor

Não cara não aparece nada no select. muito extranho.

higomatos

na action tem um método setEstado? se não, tenta colocando ele!

caiomacedor

Tem sim… tem os dois o get e o set.

higomatos

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…

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

higomatos

e o struts.xml?

caiomacedor

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?

higomatos

Ótimo, que bom que agora foi…

Tem algumas maneiras, por exemplo:

if (cliente == null) { cliente = new Cliente(); setIdEstado("1"); setIdCidade("1"); }

caiomacedor

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.

paulofernandesjr

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

caiomacedor

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.

Criado 16 de outubro de 2009
Ultima resposta 19 de out. de 2009
Respostas 23
Participantes 4