Struts 2 s:select

23 respostas
C

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

E

qual o name do seu select ?

C

esse é o meu select cara"

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

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!

C

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

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

este for para povoar o estado está no prepare?

C

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

H

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!

C

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.

H

Nobre Caio,

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

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

H

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

C

Sim mudei agora esta getEstado().

H

e aí?

a lista apareceu?

o estado foi selecionado?

C

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

H

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

C

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

H

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…

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

H

e o struts.xml?

C

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?

H

Ótimo, que bom que agora foi…

Tem algumas maneiras, por exemplo:

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

C

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.

P

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

C

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